Cod sursa(job #535352)

Utilizator Teodor94Teodor Plop Teodor94 Data 17 februarie 2011 08:52:27
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<cstdio>

const int N=100005;

char s[N];
int poz;

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

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

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

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

void afis()
{
	printf("%d\n",expresie());
}

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