Cod sursa(job #535462)

Utilizator adrian_manducadrian manduc adrian_manduc Data 17 februarie 2011 11:35:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
int poz=0;
const int N=100001;
char s[N];
int termen();
int factor();
int expresie()
{
	int sum=termen();
	while(s[poz]=='+' || s[poz]=='-')
	{
		if(s[poz]=='+')
		{
			++poz;
			sum+=termen();
		}
		else
		{
			++poz;
			sum-=termen();
		}
	}
	return sum;
}
int termen()
{
	int p=factor();
	while(s[poz]=='*' || s[poz]=='/')
	{
		if(s[poz]=='*')
		{
			++poz;
			p*=factor();
		}
		else
		{
			++poz;
			p/=factor();
		}
	}
	return p;
}
int factor()
{
	int val=0, semn=1;
	if (s[poz]=='-')
	{
		++poz;
		semn=-1;
	}
	if (s[poz]=='(')
	{
		++poz;
		val=expresie();
		++poz;
		return semn*val;
	}
	while ( s[poz]>='0' && s[poz]<='9' )
	{
		val=val*10+(s[poz]-'0');
		++poz;
	}
	return semn*val;
}

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