Pagini recente » Cod sursa (job #1294088) | Cod sursa (job #2389852) | Cod sursa (job #2150966) | Cod sursa (job #1292934) | Cod sursa (job #677428)
Cod sursa(job #677428)
#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]=-1;
else
if(s[i]=='*')
v[++k]=-2;
else
if(s[i]=='-')
v[++k]=-3;
else
if(s[i]=='/')
v[++k]=-4;
else
if(s[i]=='(')
v[++k]=-5;
else
if(s[i]==')')
v[++k]=-6;
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>0)
pol[++q]=x;
else
{
op[++p]=x;
break;
}
}
for(j=i+1;j<=k;++j)
{
x=v[j];
if(x>0)
pol[++q]=x;
else
if((x==-1&&op[p]==-3)||(x==-3&&op[p]==-1)||(x==-2&&op[p]==-4)||(x==-4&&op[p]==-2)||((x==-3||x==-1)&&(op[p]==-2||op[p]==-4)))
{
while((x==-1&&op[p]==-3)||(x==-3&&op[p]==-1)||(x==-2&&op[p]==-4)||(x==-4&&op[p]==-2)||((x==-1||x==-3)&&(op[p]==-4||op[p]==-2)))
{
pol[++q]=op[p];
op[p]=0;
--p;
}
op[++p]=x;
}
else
if(x==-6)
{
for(u=p;op[u]!=-5;--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]<0)
{
if(pol[i]==-1)
pol[i-2]+=pol[i-1];
else
if(pol[i]==-2)
pol[i-2]*=pol[i-1];
else
if(pol[i]==-3)
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];
q-=2;
i-=2;
}
printf("%d",pol[1]);
return 0;
}