Cod sursa(job #895502)

Utilizator EduardGeorgescuGeorgescu Eduard EduardGeorgescu Data 27 februarie 2013 11:37:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
 
using namespace std;
 
char S[100010];
char *Buffer = S;

int GetInt(){
	
	int Nr=0;
	
	while(*Buffer >= '0' && *Buffer <= '9')
		
		Nr=Nr*10 + ( *(Buffer++) ) - '0' ;
		
	return Nr;

}

int Termen();
int Factor();

int Eval(){
	
	int r=Termen();
	
	while(*Buffer == '+' || *Buffer == '-' )
		if(*Buffer == '+')
		{
			++Buffer;
			r+=Termen();
		}
		else
		{
			++Buffer;
			r-=Termen();
		}
		
	return r;
	
}

int Termen(){
	
	int r=Factor();
	
	while( *Buffer == '*' || *Buffer == '/' )
		if(*Buffer == '*' )
		{
			++Buffer;
			r*=Factor();
		}
		else
		{
			++Buffer;
			r/=Factor();
		}
		
	return r;
	
}

int Factor(){
	
	int r=0;
	
	if( *Buffer=='(' )
	{
		++Buffer;
		r=Eval();
		++Buffer;
	}
	else
		r=GetInt();
	
	return r;
	
}

int main(){
	
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	
	gets(S);
	printf("%d" , Eval() );
	
	return 0;

}