Cod sursa(job #398737)

Utilizator funkydvdIancu David Traian funkydvd Data 19 februarie 2010 11:39:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#define LMAX 100010
char v[LMAX];
int poz=1;
inline int cif(char x)
{
	return x>='0' && x<='9';
}
int termen();
int expr();
int eval()
{
	int rez=termen();
	while (v[poz]=='+' || v[poz]=='-')
	{
		if (v[poz]=='+')
		{
			poz++;
			rez+=termen();
		}
		if (v[poz]=='-')
		{
			poz++;
			rez-=termen();
		}
	}
	return rez;
}
int termen()
{
	int rez=expr();
	while (v[poz]=='*' || v[poz]=='/')
	{
		if (v[poz]=='*')
		{
			poz++;
			rez*=expr();
		}
		if (v[poz]=='/')
		{
			poz++;
			rez/=expr();
		}
	}
	return rez;
}
int expr()
{
	int rez=0;
	if (v[poz]=='(')
	{
		poz++;
		rez=eval();
		poz++;
	}
	else
		while (cif(v[poz]))
		{
			rez=rez*10+v[poz]-'0';
			poz++;
		}
	return rez;
}
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	fgets(v+1,LMAX,stdin);
	printf("%d\n",eval());
	return 0;
}