Cod sursa(job #2479412)
Utilizator | Data | 23 octombrie 2019 19:50:33 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 5.17 kb |
#include <fstream>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c;
int i,n,k,nr,gasitnr,fp[100001],stiva[100001];
int main()
{
while(in>>c)
{
if(c>='0'&&c<='9')
{
gasitnr=1;
nr=nr*10+(c-48);
}
else
if(gasitnr==1)
{
n++;
fp[n]=nr;
nr=0;
gasitnr=0;
}
if(c=='(')
{
k++;
stiva[k]=-1;
}
else
if(c=='+'||c=='-')
{
if(stiva[k]>=-6&&stiva[k]<=-3)
{
if(stiva[k]==-6)
{
n++;
fp[n]=-6;
if(c=='+')
stiva[k]=-6;
else
stiva[k]=-5;
}
else
if(stiva[k]==-5)
{
n++;
fp[n]=-5;
if(c=='+')
stiva[k]=-6;
else
stiva[k]=-5;
}
else
if(stiva[k]==-4)
{
n++;
fp[n]=-4;
if(c=='+')
stiva[k]=-6;
else
stiva[k]=-5;
}
else
if(stiva[k]==-3)
{
n++;
fp[n]=-3;
if(c=='+')
stiva[k]=-6;
else
stiva[k]=-5;
}
}
else
{
k++;
if(c=='+')
stiva[k]=-6;
if(c=='-')
stiva[k]=-5;
if(c=='*')
stiva[k]=-4;
if(c=='/')
stiva[k]=-3;
}
}
else
if(c=='*'||c=='/')
{
if(stiva[k]>=-4&&stiva[k]<=-3)
{
if(stiva[k]==-4)
{
n++;
fp[n]=-4;
if(c=='*')
stiva[k]=-4;
else
stiva[k]=-3;
}
else
if(stiva[k]==-3)
{
n++;
fp[n]=-3;
if(c=='*')
stiva[k]=-4;
else
stiva[k]=-3;
}
}
else
{
k++;
if(c=='+')
stiva[k]=-6;
if(c=='-')
stiva[k]=-5;
if(c=='*')
stiva[k]=-4;
if(c=='/')
stiva[k]=-3;
}
}
else
if(c==')')
{
while(k>0&&stiva[k]!=-1)
{
n++;
fp[n]=stiva[k];
k--;
}
k--;
}
}
if(gasitnr==1)
{
n++;
fp[n]=nr;
}
while(k>0)
{
n++;
fp[n]=stiva[k];
k--;
}
k=0;
for(i=1;i<=n;i++)
if(fp[i]<0)
{
if(fp[i]==-6)
{
stiva[k-1]=stiva[k-1]+stiva[k];
k--;
}
else
if(fp[i]==-5)
{
stiva[k-1]=stiva[k-1]-stiva[k];
k--;
}
else
if(fp[i]==-4)
{
stiva[k-1]=stiva[k-1]*stiva[k];
k--;
}
else
{
stiva[k-1]=stiva[k-1]/stiva[k];
k--;
}
}
else
{
k++;
stiva[k]=fp[i];
}
out<<stiva[1];
return 0;
}