Pagini recente » Cod sursa (job #3268170) | Cod sursa (job #1183611) | Cod sursa (job #1086834) | Cod sursa (job #949278) | Cod sursa (job #677493)
Cod sursa(job #677493)
#include<cstdio>
#include<cstring>
#include<cctype>
int op[100001],pol[100001],v[100001];
char s[100001];
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
int n,i,k,j,nr,p,q,u,x;
gets(s);
n=strlen(s);
k=0;
for(i=0;i<n;++i)
if(s[i]=='+')
v[++k]=1000000001;
else
if(s[i]=='*')
v[++k]=1000000002;
else
if(s[i]=='-')
v[++k]=1000000003;
else
if(s[i]=='/')
v[++k]=1000000004;
else
if(s[i]=='(')
v[++k]=1000000005;
else
if(s[i]==')')
v[++k]=1000000006;
else
{
nr=0;
while(isdigit(s[i]))
{
nr=nr*10+(s[i]-'0');
++i;
}
--i;
v[++k]=nr;
}
p=q=0;
for(i=1;i<=k;++i)
{
x=v[i];
if(x<=1000000000)
pol[++q]=x;
else
{
op[++p]=x;
break;
}
}
for(j=i+1;j<=k;++j)
{
x=v[j];
if(x<=1000000000)
pol[++q]=x;
else
if((x==1000000001&&op[p]==1000000003)||(x==1000000003&&op[p]==1000000001)||(x==1000000002&&op[p]==1000000004)||(x==1000000004&&op[p]==1000000002)||((x==1000000003||x==1000000001)&&(op[p]==1000000002||op[p]==1000000004)))
{
while((x==1000000001&&op[p]==1000000003)||(x==1000000003&&op[p]==1000000001)||(x==1000000002&&op[p]==1000000004)||(x==1000000004&&op[p]==1000000002)||((x==1000000001||x==1000000003)&&(op[p]==1000000004||op[p]==1000000002)))
{
pol[++q]=op[p];
op[p]=0;
--p;
}
op[++p]=x;
}
else
if(x==1000000006)
{
for(u=p;op[u]!=1000000005;--u)
{
pol[++q]=op[u];
op[u]=0;
--p;
}
op[p]=0;
--p;
}
else
op[++p]=x;
}
for(i=p;i>=1;--i)
pol[++q]=op[i];
for(i=1;i<=q;++i)
if(pol[i]>1000000000)
{
if(pol[i]==1000000001)
pol[i-2]+=pol[i-1];
else
if(pol[i]==1000000002)
pol[i-2]*=pol[i-1];
else
if(pol[i]==1000000003)
pol[i-2]-=pol[i-1];
else
pol[i-2]/=pol[i-1];
for(j=i-1;j<q-1;++j)
pol[j]=pol[j+2];
pol[q]=pol[q-1]=0;
q-=2;
i-=2;
}
printf("%d",pol[1]);
return 0;
}