Cod sursa(job #2659247)
Utilizator | Data | 16 octombrie 2020 11:58:11 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 3.07 kb |
#include <fstream>
#include<cstring>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char s[100001];
int st[100001], rez[100001];
int main()
{
int i,n,k,nr,nr1;
cin>>s;
n=strlen(s);
k=0;
nr=0;
for(i=0;i<n;i++)
if(s[i]=='(')
{
k++;
st[k]=-1;
}
else
if(s[i]=='+')
{
while(st[k]==-4 || st[k]==-5 && k>0)
{
nr++;
rez[nr]=st[k];
k--;
}
k++;
st[k]=-2;
}
else
if(s[i]=='-')
{
while(st[k]==-4 || st[k]==-5 && k>0)
{
nr++;
rez[nr]=st[k];
k--;
}
k++;
st[k]=-3;
}
else
if(s[i]==')')
{
while(st[k]!=-1 && k>0)
{
nr++;
rez[nr]=st[k];
k--;
}
k--;
}
else
if(s[i]=='*')
{
k++;
st[k]=-4;
}
else
if(s[i]=='/')
{
k++;
st[k]=-5;
}
else
{
nr1=0;
while(s[i]>='0' && s[i]<='9'&& i<n)
{
nr1=nr1*10+(s[i]-'0');
i++;
}
nr++;
rez[nr]=nr1;
i--;
}
while(k>0)
{
nr++;
rez[nr]=st[k];
k--;
}
k=0;
for(i=1;i<=nr;i++)
if(rez[i]>=0)
{
k++;
st[k]=rez[i];
}
else
if(rez[i]==-2)
{
st[k-1]+=st[k];
k--;
}
else
if(rez[i]==-3)
{
st[k-1]-=st[k];
k--;
}
else
if(rez[i]==-4)
{
st[k-1]*=st[k];
k--;
}
else
{
st[k-1]/=st[k];
k--;
}
cout<<st[1];
return 0;
}