Pagini recente » Cod sursa (job #1640832) | Cod sursa (job #1093913) | Cod sursa (job #750666) | Cod sursa (job #579828)
Cod sursa(job #579828)
#include<stdio.h>
#include<string.h>
char s[100050];
long st[100050],aux[100050],n,x[100050],lx,la,l,i;
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
gets(s+1);
s[0]=1;
n=strlen(s);
for(i=1;i<=n;++i)
{
if(s[i]<='9'&&s[i]>='0')
if(s[i-1]<='9'&&s[i-1]>='0')if(st[l]>0)st[l]=st[l]*10+s[i]-'0';
else st[l]=st[l]*10-s[i]+'0';
else
if(s[i-1]=='-'&&(s[i-2]=='('||i-2==0)){--la;st[++l]=-(s[i]-'0');}
else st[++l]=s[i]-'0';
if(s[i]=='(')aux[++la]=-1000000010;
if(s[i]=='*'){while(aux[la]==-1000000003||aux[la]==-1000000004){st[++l]=aux[la--];}aux[++la]=-1000000004;}
if(s[i]=='/'){while(aux[la]==-1000000003||aux[la]==-1000000004){st[++l]=aux[la--];}aux[++la]=-1000000003;}
if(s[i]=='+'){while(aux[la]>=-1000000004&&aux[la]<=-1000000001){st[++l]=aux[la--];}aux[++la]=-1000000002;}
if(s[i]=='-'){while(aux[la]>=-1000000004&&aux[la]<=-1000000001){st[++l]=aux[la--];}aux[++la]=-1000000001;}
if(s[i]==')'){while(aux[la]!=-1000000010){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]>-1000000000)x[++lx]=st[i];
else
if(st[i]==-1000000004)x[lx-1]*=x[lx--];
else
if(st[i]==-1000000003)x[lx-1]/=x[lx--];
else
if(st[i]==-1000000002)x[lx-1]+=x[lx--];
else
if(st[i]==-1000000001)x[lx-1]-=x[lx--];
printf("%ld\n",x[1]);
return 0;
}