Cod sursa(job #434170)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 5 aprilie 2010 11:26:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#define LMAX 100005
char A[LMAX];
int poz=1;
int eval2();
int eval3();
int eval1()
{
	int rez=eval2();
	while (A[poz]=='+' || A[poz]=='-')
	{
		if (A[poz]=='+')
			poz++,rez+=eval2();
		if (A[poz]=='-')
			poz++,rez-=eval2();
	}
	return rez;
}
int eval2()
{
	int rez=eval3();
	while (A[poz]=='*' || A[poz]=='/')
	{
		if (A[poz]=='*')
			poz++,rez*=eval3();
		if (A[poz]=='/')
			poz++,rez/=eval3();
	}
	return rez;
}
inline int cif(char x)
{
	return x>='0' && x<='9';
}
int eval3()
{
	int rez=0;
	if (A[poz]=='(')
	{
		poz++;
		rez=eval1();
		poz++;
	}
	else
		while (cif(A[poz]))
			rez=rez*10+A[poz]-'0',poz++;
	return rez;
}
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	fgets(A+1,LMAX,stdin);
	printf("%d\n",eval1());
	return 0;
}