Cod sursa(job #301683)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 8 aprilie 2009 13:02:09
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>
#include <cstring>

char s[100010];
char *p=s;
char operand[4][4] = {"+-", "*/", "^", ""};
const int hmax = 2;

int operatie(int x, int y, char c)
{
	switch ( c )
	{
		case '+': return x+y;
		case '-': return x-y;
		case '*': return x*y;
		case '/': return x/y;
	}
	return 0;
}

int eval(int);

int element() 
{
	int r=0;
	if ( *p == '(' )
	{
		++p; r = eval(0); ++p;
	}
	else 
	{
		while ( strchr("0123456789", *p) )
			r = r*10 + *(++p-1) - '0';
	}
	return r;
}

int eval(int h)
{
	int r = (h==hmax)?element():eval(h+1);
	while ( strchr(operand[h], *p) ) 
		r = operatie(r, eval(h+1), *(++p-1));
	return r;
}


int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	
	fgets(s,100010,stdin);
	printf("%d\n", eval(0));
	
	return 0;
}