Cod sursa(job #1048765)

Utilizator heracleRadu Muntean heracle Data 6 decembrie 2013 13:14:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>


const int Q=100007;
char s[Q];
int p;

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


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

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

}

int expresie(){

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

}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
	scanf("%s",&s);
	printf("%d",expresie());
}