Cod sursa(job #754130)

Utilizator danalex97Dan H Alexandru danalex97 Data 31 mai 2012 20:19:58
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <cstdio>
#include <cstring>
using namespace std;

#define Dmax 100021

char s[Dmax];
int x;

int e();int f(){int n,R,S,o,T;o=T=R=S=1;while(T){S=1;n=0;if(s[x]=='-')S=-S,++x;else if(s[x]=='+')++x;if(s[x]=='(')x++,n=e();else for(;'0'<=s[x]&&s[x]<='9';n=n*10+s[x++]-48);if(o)R*=S*n;else if(n)R/=n;else R=0;if(s[x]=='/')o=0,x++;else if(s[x]=='*')o=1,x++;else T=0;}return R;}int e(){int S=0;while(s[x]!=')')S+=f();++x;return S;}         

/*
int Eval();

int Fact()
{
	int Nbr,Sol,Sum;
	bool Inm,TF;
	
	Inm=TF=1;
	Sol=Sum=1;
	
	while ( TF )
	{
		Sum=1;
		Nbr=0;
		if ( s[Act]=='-' )
		{ 
			Sum*=-1; 
			++Act;
		}
		else
			if ( s[Act]=='+' ) 
				++Act;

		if ( s[Act]=='(' ) 
		{
			Act++;
			Nbr=Eval();
		}
		else 
			for (;'0'<=s[Act] && s[Act]<='9' ; Nbr=Nbr*10+s[Act]-48 ,++Act );

		if ( Inm==1 ) 
			Sol*=Sum*Nbr;
		else 
			if ( Nbr ) 
				Sol/=Nbr; 
			else 
				Sol=0;
	
		if ( s[Act]=='/' )
		{
			Inm=0;
			Act++;
		}
		else  
			if ( s[Act]=='*' ) 
			{
				Inm=1;
				Act++;
			}
			else 
				TF=0;
	}

	return Sol;
}

int Eval()
{
	int All=0;
	
	while ( s[Act]!=')' ) 
		All+=Fact();
	
	++Act;
	return All;
}
*/
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);

	scanf("%s",s);
	s[strlen(s)]=')';
	
	printf("%d", e() );
}