Cod sursa(job #151733)

Utilizator a7893Nae Mihai a7893 Data 8 martie 2008 16:08:48
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
#include<string.h>
#define N 100001
char e[N];
int i,lg;
int EvalExpr();
int EvalFact();
int EvalTer();
int eval()
{
	int x=0;
	while(e[i]>='0'&&e[i]<='9')
	{
		x=x*10+(e[i]-'0');
		i++;
	}
	return x;
}
int EvalTer()
{
	int f=EvalFact();
	while(i<lg&&(e[i]=='*'||e[i]=='/'))
	{
		i++;
		if(e[i-1]=='*')
			f*=EvalFact();
		if(e[i-1]=='/')
			f/=EvalFact();
	}
	return f;
}
int EvalExpr()
{
	int t=EvalTer();
	while(i<lg&&(e[i]=='+'||e[i]=='-'))
	{
		i++;
		if(e[i-1]=='+')
			t+=EvalTer();
		if(e[i-1]=='-')
			t-=EvalTer();
	}
	return t;
}
int EvalFact()
{
	int f;
	if(e[i]=='(')
	{
		i++;
		f=EvalExpr();
		i++;
	}
	else
	{
		f=eval();
	}
	return f;
}
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	scanf("%s\n",&e);
	lg=strlen(e);
	printf("%d\n",EvalExpr());
	return 0;
}