Cod sursa(job #563489)

Utilizator joli94Apostol Adrian Alexandru joli94 Data 25 martie 2011 12:16:28
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<cstdio>
char sir[100001];
int poz=0;

int factor();
int termen();
int expresie();

int expresie()
{
	int sum = termen();
	while ( sir[poz]=='+' || sir[poz]=='-' )
	{
		if (sir[poz]=='+') 
		{
			++poz;
			sum += termen();
		}
		if (sir[poz]=='-')
		{
			++poz;
			sum -= termen();
		}
	}
	return sum;
}

int termen()
{
	int prod = factor();
	while ( sir[poz]=='*' || sir[poz]=='/' )
	{
		if (sir[poz]=='*')
		{
			++poz;
			prod *= factor();
		}
		if (sir[poz]=='/')
		{
			++poz;
			prod /= factor();
		}
	}
	return prod;
}

int factor()
{
	int val = 0 , semn = 1;
	if (sir[poz]=='-') 
	{
		++poz;
	}
	if (sir[poz]=='+') ++poz;
	if (sir[poz]=='(')
	{
		++poz;
		val = expresie();
		++poz;
		return val;
	}
	while (sir[poz]>='0' && sir[poz]<='9')
		val = val*10 + sir[poz++] - '0';
	return val;
}

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