Cod sursa(job #579653)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 12 aprilie 2011 12:42:37
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<stdio.h>
#include<string.h>
char s[100050],aux[100050];
long st[100050],n,x[100050],lx,la,l,i;
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	gets(s);
	n=strlen(s);
	for(i=0;i<n;++i)
	{
		if(s[i]<='9'&&s[i]>='0')
			if(i>0)if(s[i-1]<='9'&&s[i-1]>='0')st[l]=st[l]*10+s[i]-'0';
			else
			st[++l]=s[i]-'0';	
			else
			st[++l]=s[i]-'0';
		if(s[i]=='(')aux[++la]=-10;
		if(s[i]=='*'){while(aux[la]==-3||aux[la]==-4){st[++l]=aux[la--];}aux[++la]=-4;}
		if(s[i]=='/'){while(aux[la]==-3||aux[la]==-4){st[++l]=aux[la--];}aux[++la]=-3;}
		if(s[i]=='+'){while(aux[la]>=-4&&aux[la]<=-1){st[++l]=aux[la--];}aux[++la]=-2;}
		if(s[i]=='-'){while(aux[la]>=-4&&aux[la]<=-1){st[++l]=aux[la--];}aux[++la]=-1;}
		if(s[i]==')'){while(aux[la]!=-10){st[++l]=aux[la--];}--la;}
	}
	while(la>0){st[++l]=aux[la--];}
	x[1]=st[1];
	lx=1;
	for(i=2;i<=l;++i)
		if(st[i]>0)x[++lx]=st[i];
		else 
		if(st[i]==-4)x[lx-1]*=x[lx--];
		else
		if(st[i]==-3)x[lx-1]/=x[lx--];
		else
		if(st[i]==-2)x[lx-1]+=x[lx--];
		else
		if(st[i]==-1)x[lx-1]-=x[lx--];
	printf("%ld\n",x[1]);
	return 0;
}