Pagini recente » Cod sursa (job #2381195) | Cod sursa (job #466142) | Cod sursa (job #2644017) | Cod sursa (job #533267) | Cod sursa (job #579653)
Cod sursa(job #579653)
#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;
}