Cod sursa(job #157679)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 13 martie 2008 10:47:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#define vv 1000005

char e[vv], *p;

inline int operatie(int x, int y, char c)
{
	if (c=='+')
		return x+y;
	if (c=='-')
		return x-y;
	if (c=='*')
		return x*y;
	if (c=='/')
		return x/y;
	return -1;
}

inline int eval();

inline int factor()
{
	int rez;
	if (*p=='(')
	{
		p++;
		rez=eval();
		p++;
		return rez;
	}
	for (rez=0; '0'<=*p && *p<='9'; p++)
		rez=rez*10+*p-'0';
	return rez;
}

inline int termen()
{
	int rez=factor();

	for (; *p=='*' || *p=='/';)
	{
		char op=*p;
		p++;
		rez=operatie(rez, factor(), op);
	}
	return rez;
}

inline int eval()
{
	int rez=termen();
	for (; *p=='+' || *p=='-';)
	{
		char op=*p;
		p++;
		rez=operatie(rez, termen(), op);
	}
	return rez;
}

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