Cod sursa(job #626055)

Utilizator voicuraduVoicu Radu voicuradu Data 26 octombrie 2011 11:32:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<cstdio>
using namespace std;
char s[100010];
int a,p;
int expresie();
int factor();
int termen();
void read()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	gets(s);
	//n=strlen(s);
}

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

int expresie()
{
	int sum;
	sum=termen();
	while(s[p]=='+' || s[p]=='-')
		if(s[p]=='+')
		{
			p++;
			sum+=termen();
		}
		else
		{
			p++;
			sum-=termen();
		}
		return sum;
}

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

void rez()
{
	a=expresie();
	printf("%d\n",a);
}

int main()
{
	read();
	rez();
	return 0;
}