Cod sursa(job #837346)

Utilizator dariusdariusMarian Darius dariusdarius Data 17 decembrie 2012 21:32:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
#include<string.h>
int i,n,solve(),solve_2(),expresie_intre_paranteze();
char s[100005];
int expresie_intre_paranteze()
{
	int rez=solve();
	while(s[i]=='+' || s[i]=='-')
	{
		if(s[i]=='+')
		{
			i++;
			rez+=solve();
		}
		else
		{
			i++;
			rez-=solve();
		}
	}
	return rez;
}
int solve()
{
	int rez=solve_2();
	while(s[i]=='*' || s[i]=='/')
	{
		if(s[i]=='*')
		{
			i++;
			rez*=solve_2();
		}
		else
		{
			i++;
			rez/=solve_2();
		}
	}
	return rez;
}
int solve_2()
{
	int rez=0;
	if(s[i]=='(') {i++;rez=expresie_intre_paranteze();i++;}
	else
		while(i<=n && strchr("0123456789",s[i]))
		{
			rez=rez*10+s[i]-'0';
			i++;
		}
	return rez;
}
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	gets(s+1);n=strlen(s+1);i=1;
	printf("%d\n",expresie_intre_paranteze());
	return 0;
}