Cod sursa(job #269299)

Utilizator PlanmanValeriu Metrea Planman Data 2 martie 2009 19:10:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>

#define Nmax 100100

char a[Nmax],*c;
int eval(),fact(),termen(),op1(),op2(),op3(),op4();

int op1(int a,int b)
{
	return a*b;
}

int op2(int a,int b)
{
	return a/b;
}

int op3(int a,int b)
{
	return a+b;
}
int op4(int a,int b)
{
	return a-b;
}

int formeaza()
{
	int tmp=0;
	while(*c>='0' && *c<='9')
		{
			tmp=tmp*10+(*c-'0');
			++c;
		}
	return tmp;
}

int termen()
{
	if(*c>='0' && *c<='9')
		return formeaza();
	++c;
	return eval();
}

int fact()
{
	int ret=termen();
	while(*c=='*' || *c=='/')
		{

			if(*c=='*')
				{
					++c;
					ret= op1(ret,termen());
				}
			else
				{
					++c;
					ret= op2(ret,termen());
				}
		}
	return ret;
}

int eval()
{
	int ret=fact();
	while(*c=='+' || *c=='-')
		{
			if(*c=='+')
				{
					++c;
					ret= op3(ret,fact());
				}
			else
				{
					++c;
					ret= op4(ret,fact());
				}
		}
	++c;
	return ret;
}
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);

	scanf("%s",a);
	c=a;
	printf("%d",eval());
	return 0;
}