Cod sursa(job #754129)

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

#define Dmax 100021

char s[Dmax];
int Act;

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", Eval() );
}