Cod sursa(job #856331)

Utilizator matei_cChristescu Matei matei_c Data 16 ianuarie 2013 12:10:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std ;

#define maxs 100001

char sir[maxs] ;
char *p = sir ;

int termen() ;
int factor() ;

int evaluare()
{
	int rez = termen() ;
	
	while( *p == '+' || *p == '-' )
	{
		switch( *p )
		{
			case '+' :
			{
				++p ;
				rez += termen() ;
				break ;
			}
			case '-' :
			{
				++p ;
				rez -= termen() ;
				break ;
			}	
		}	
	}
	
	return rez ;
}

int termen()
{
	int rez = factor() ;
	
	while( *p == '*' || *p == '/' )
	{
		switch( *p )
		{
			case '*' :
			{
				++p ;
				rez *= factor() ;
				break ;
			}	
			case '/' :
			{
				++p ;
				rez /= factor() ;
				break ;
			}	
		}
	}

	return rez ;	
}

int factor()
{
	int rez = 0 ;
	
	if( *p == '(' )
	{
		++p ;
		rez = evaluare() ;
		++p ;
	}
	else
	{
		while( *p >= '0' && *p <= '9' )
		{	
			rez = rez * 10 + *p - '0' ;
			++p ;
		}	
	}
	
	return rez ;
}

int main()
{
	
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);
	
	fgets( sir, maxs, stdin ) ;
	
	printf("%d\n", evaluare() );
	
	return 0 ;
	
}