Cod sursa(job #468659)

Utilizator whoasdas dasdas who Data 4 iulie 2010 15:24:35
Problema Evaluarea unei expresii Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
#include<string>
using namespace std;

char s[100010];
short i=0;

int exp();
int termen();
int factor()
{
	int nr = 0;
	if(s[i]=='(')
	{
		++i;
		nr = exp();
		++i;		// sarim peste ')'
	}
	else
		while(isdigit(s[i]))
			nr=nr*10+s[i++]-'0';
	return nr;
}
int termen()
{
	int r = factor();

	while(s[i]=='*'||s[i]=='/')
	{
		if(s[i]=='*') { ++i; r *= factor(); }
		else
		if(s[i]=='/') {	++i; r /= factor(); }
	}		
	
	return r;
}

int exp()
{
	int r = termen();
	
	while(s[i]=='+'||s[i]=='-')
	{
		if(s[i]=='+') { ++i; r += termen(); }
		else 
		if(s[i]=='-') { ++i; r -= termen(); }
	}
	
	return r;
}

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