Cod sursa(job #1824315)
Utilizator | Data | 7 decembrie 2016 18:22:30 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.98 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char c[100010],st1[100010];
int n,i,vf,vff,x,y,nr,st2[100010];
int main()
{
f.getline(c+1,100010);
c[0]='(';
st1[1]='(';
vf=1;
n=strlen(c+1);
c[n+1]=')';
for(i=1;i<=n+1;++i)
{
if(c[i]==')')
{
while(st1[vf]!='('){
if(st1[vf]=='+')
{
vf--;
x=st2[vff-1];
y=st2[vff];
vff=vff-2;
st2[++vff]=x+y;
}
else
{
if(st1[vf]=='-')
{
vf--;
x=st2[vff-1];
y=st2[vff];
vff-=2;
st2[++vff]=x-y;
}
else
{
if(st1[vf]=='*')
{
vf--;
x=st2[vff-1];
y=st2[vff];
vff-=2;
st2[++vff]=x*y;
}
else
{
if(st1[vf]=='/')
{
vf--;
x=st2[vff-1];
y=st2[vff];
vff-=2;
st2[++vff]=x/y;
}
}
}
}
}
vf--;
}
else
{
if(c[i]=='+')
{
if(st1[vf]=='*' || st1[vf]=='/')
{
x=st2[vff-1];
y=st2[vff];
vff-=2;
if(st1[vf]=='*')
st2[++vff]=x*y;
else
st2[++vff]=x/y;
vf--;
}
st1[++vf]='+';
}
if(c[i]=='-')
{
if(st1[vf]=='*' || st1[vf]=='/')
{
x=st2[vff-1];
y=st2[vff];
vff-=2;
if(st1[vf]=='*')
st2[++vff]=x*y;
else
st2[++vff]=x/y;
vf--;
}
st1[++vf]='-';
}
if(c[i]=='*')
st1[++vf]='*';
if(c[i]=='/')
st1[++vf]='/';
if(c[i]=='(')
st1[++vf]='(';
if(c[i]-'0'>=0 && c[i]-'0'<10)
{
nr=0;
while(c[i]-'0'>=0 && c[i]-'0'<10)
{
nr=nr*10+c[i]-'0';
++i;
}
st2[++vff]=nr;
--i;
}
}
}
g<<st2[vff];
return 0;
}