Cod sursa(job #2480314)
Utilizator | Data | 25 octombrie 2019 11:59:19 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 4.21 kb |
#include <stdio.h>
#include <cstring>
using namespace std;
char s[100001];
int rez[100001],st[100001];
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
int n,i,nr,k=0,t=0,a,b;
scanf("%s",(s+1));
n=strlen(s+1);
for(i=1;i<=n;i++)
{
if(s[i]>='0' && s[i]<='9')
{
nr=(s[i]-'0');
i++;
while(s[i]>='0' && s[i]<='9')
{
nr*=10;
nr+=(s[i]-'0');
i++;
}
i--;
k++;
rez[k]=nr;
}
else
{
if(s[i]=='+')
{
if(st[t]==-6 || st[t]==-5 || st[t]==-4 || st[t]==-3)
{
k++;
rez[k]=st[t];
st[t]=-5;
}
else
{
t++;
st[t]=-5;
}
}
else
{
if(s[i]=='-')
{
if(st[t]==-6 || st[t]==-5 || st[t]==-4 || st[t]==-3)
{
k++;
rez[k]=st[t];
st[t]=-6;
}
else
{
t++;
st[t]=-6;
}
}
else
{
if(s[i]=='*')
{
if(st[t]==-4 || st[t]==-3)
{
k++;
rez[k]=st[t];
st[t]=-3;
}
else
{
t++;
st[t]=-3;
}
}
else
{
if(s[i]=='/')
{
if(st[t]==-4 || st[t]==-3)
{
k++;
rez[k]=st[t];
st[t]=-4;
}
else
{
t++;
st[t]=-4;
}
}
else
{
if(s[i]=='(')
{
t++;
st[t]=-1;
}
else
{
if(s[i]==')')
{
while(st[t]!=-1)
{
k++;
rez[k]=st[t];
t--;
}
t--;
}
}
}
}
}
}
}
}
for(i=t;i>=1;i--)
{
k++;
rez[k]=st[i];
}
t=0;
for(i=1;i<=k;i++)
{
if(rez[i]>=0)
{
t++;
st[t]=rez[i];
}
else
{
a=st[t-1];
b=st[t];
t--;
if(rez[i]==-6)
{
st[t]=a-b;
}
else
{
if(rez[i]==-5)
{
st[t]=a+b;
}
else
{
if(rez[i]==-4)
{
st[t]=a/b;
}
else
{
st[t]=a*b;
}
}
}
}
}
printf("%d",st[1]);
return 0;
}