Cod sursa(job #936476)

Utilizator BitOneSAlexandru BitOne Data 7 aprilie 2013 13:11:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <string>
#include <cstdlib>
#include <fstream>

using namespace std;

const int MAXLEVEL = 2;
const int ERROR    = - (1 << 29);

string exp;
string::iterator it, iend;
const string op[] = {"+-", "/*", "^"};

inline int eval(char op, int a, int b)
{
	switch(op)
	{
		case '+' : return a + b;
		case '-' : return a - b;
		case '*' : return a * b;
		case '/' : return a / b;
		default  : return ERROR;
	}
} 

inline int eval(int level)
{
	int x;
	if(MAXLEVEL == level)
	{
		if('(' == *it)
		{
			++it;
			x = eval(0);
			++it;
		}
		else for(x = 0; it < iend && *it >= '0' && *it <= '9'; ++it)
			 {
				 x = x * 10 + *it - '0';
			 }
	}
	else for(x = eval(level + 1); it < iend && string::npos != op[level].find(*it); )
		  {
			  char op = *(it++);
			  x = eval(op, x, eval(level + 1));
		  }
	return x;
}

int main()
{
	ifstream in("evaluare.in");
	ofstream out("evaluare.out");
	
	getline(in, exp);
	it = exp.begin();
	iend = exp.end();
	
	out << eval(0) << '\n';
	
	return EXIT_SUCCESS;
}