Cod sursa(job #535351)

Utilizator nightwish0031Vlad Radu Cristian nightwish0031 Data 17 februarie 2011 08:52:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<cstdio>

const int NMAX=100001;
char s[NMAX];
int poz;

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

void citire()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	
	gets(s);
}

void afisare()
{
	printf("%d",expresie());
}

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]=='-')
		semn=-1,++poz;
	
	if (s[poz]=='(')
	{
		++poz;
		val=expresie();
		++poz;
		return semn*val;
	}
	
	while (s[poz]>='0'&&s[poz]<='9')
		val=val*10+(s[poz++]-'0');
		
	return semn*val;
}

int main()
{
	citire();
	afisare();
	
	return 0;
}