Cod sursa(job #1831880)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 18 decembrie 2016 22:35:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <string>
using namespace std;

int index = 0;
string s;

int termen();
int factor();

int eval()
{
	int r;
	
	r = termen();
	while((index < (int) s.size()) && (s[index] == '+' || s[index] == '-'))
	{
		if(s[index] == '+')
		{
			++index;
			r += termen();
		}
		else if(s[index] == '-')
		{
			++index;
			r -= termen();
		}
	}
	
	return r;
}

int termen()
{
	int r;

	r = factor();
	while((index < (int) s.size()) && (s[index] == '*' || s[index] == '/'))
	{
		if(s[index] == '*')
		{
			++index;
			r *= factor();
		}
		else if(s[index] == '/')
		{
			++index;
			r /= factor();
		}
	}

	return r;
}

int factor()
{
	int r;
	
	if(s[index] == '(')
	{
		++index;
		r = eval();
		++index;
	}
	else
	{
		int nr = 0;
		while((index < (int) s.size()) && s[index] >= '0' && s[index] <= '9')
		{
			nr = 10 * nr + (s[index] - '0');
			++index;
		}
		r = nr;
	}
	
	return r;
}

int main()
{
	ifstream in("evaluare.in");
	ofstream out("evaluare.out");
	
	in >> s;
	int ans = eval();
	out<<ans<<"\n";
	in.close();
	out.close();
}