Cod sursa(job #2481143)
Utilizator | Data | 26 octombrie 2019 15:04:06 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.84 kb |
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
long long b[100002],c[100002],i,x,n,y,x1;
char a[100002];
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",&a);
n=strlen(a);
for(i=0;i<=n-1;i++)
{
if(a[i]>='0' && a[i]<='9')
{
x1=0;
while(a[i]>='0' && a[i]<='9')
{
x1=x1*10+a[i]-48;;
i++;
}
i--;
x++;
b[x]=x1;
}
else
{
if(a[i]=='(')
{
y++;
c[y]=-1;
}
else
if(a[i]==')')
{
while(y!=0 && c[y]!=-1)
{
x++;
b[x]=c[y];
y--;
}
if(c[y]==-1)
y--;
}
else
if(a[i]=='*')
{
if(c[y]==-3 || c[y]==-4)
{
x++;
b[x]=c[y];
y--;
}
y++;
c[y]=-3;
}
else
if(a[i]=='/')
{
if(c[y]==-3 || c[y]==-4)
{
x++;
b[x]=c[y];
y--;
}
y++;
c[y]=-4;
}
else
if(a[i]=='+')
{
if(c[y]!=-1 && y!=0)
{
x++;
b[x]=c[y];
y--;
}
y++;
c[y]=-5;
}
else
if(a[i]=='-')
{
if(c[y]!=-1 && y!=0)
{
x++;
b[x]=c[y];
y--;
}
y++;
c[y]=-6;
}
}
}
while(y!=0)
{
x++;
b[x]=c[y];
y--;
}
for(i=1;i<=x;i++)
{
//printf("%d ",b[i]);
if(b[i]>=0)
{
y++;
c[y]=b[i];
}
else
{
if(b[i]==-3)
{
y--;
c[y]=c[y]*c[y+1];
}
if(b[i]==-4)
{
y--;
c[y]=c[y]/c[y+1];
}
if(b[i]==-5)
{
y--;
c[y]=c[y]+c[y+1];
}
if(b[i]==-6)
{
y--;
c[y]=c[y]-c[y+1];
}
}
}
printf("%d",c[y]);
return 0;
}