Cod sursa(job #424384)

Utilizator c_iulyanCretu Iulian c_iulyan Data 24 martie 2010 20:13:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<cstdio>
#include<cstring>

char s[101010];
long n;
long go(long &p);

long num(long &p)
{
long nr=0;
if(s[p]=='(')
	{
	p++;
	long RR=go(p);
	return RR;
	}
	
while('0'<=s[p]&&s[p]<='9'&&p<n)
	nr=nr*10+s[p]-'0',p++;
p--;
	
return nr;
}

long go(long &p)
{
long nr=0,S=0,pr=1,sm=1;

while(1)
	{
	while('0'<=s[p]&&s[p]<='9'&&p<n)
		nr=nr*10+s[p]-'0',p++;
	
	if(p==n||s[p]==')')
		return pr*nr*sm+S;
	
	else if(s[p]=='+')
		S+=pr*nr*sm,sm=1,pr=1,nr=0;
		
	else if(s[p]=='-')
		S+=pr*nr*sm,sm=-1,pr=1,nr=0;
		
	else if(s[p]=='*')
		pr*=nr,nr=0;
		
	else if(s[p]=='/')
		p++,pr=pr*nr/num(p),nr=1;
		
	else if(s[p]=='(')
		p++,nr=go(p);
		
	p++;
	}	
}

int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);

scanf("%s",s);
n=strlen(s);
long p=0;
printf("%ld",go(p));

return 0;
}