Cod sursa(job #2188471)
Utilizator | Data | 27 martie 2018 10:15:55 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 4.37 kb |
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
#define maxim 1000000000
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
char c;
int i,l,fp[100010],val,k,k2,st[100010],j,i1,i2;
stack <int> q;
int main()
{
//poland isnt a real country
//poland cant into space
//danzig and pozen are german clay
fin>>s;
l=s.size();
val=0;
k=0;
k2=0;
for(i=0; i<l; i++)
{
c=s[i];
if(c<='9'&&c>='0') val=val*10+(int) (c-'0');
else
{
if(s[i-1]<='9'&&s[i-1]>='0')
{
k++;
fp[k]=val;
val=0;
}
if(c=='+')
{
k2++;
st[k2]=maxim+1;
while(st[k2-1]-maxim>=1&&st[k2-1]-maxim<=4)
{
k++;
fp[k]=st[k2-1];
st[k2-1]=st[k2];
k2--;
}
}
else
{
if(c=='-')
{
k2++;
st[k2]=maxim+2;
while(st[k2-1]-maxim>=1&&st[k2-1]-maxim<=4)
{
k++;
fp[k]=st[k2-1];
st[k2-1]=st[k2];
k2--;
}
}
else
{
if(c=='*')
{
k2++;
st[k2]=maxim+3;
if(st[k2-1]-maxim>=3&&st[k2-1]-maxim<=4)
{
k++;
fp[k]=st[k2-1];
st[k2-1]=st[k2];
k2--;
}
}
else
{
if(c=='/')
{
k2++;
st[k2]=maxim+4;
if(st[k2-1]-maxim>=3&&st[k2-1]-maxim<=4)
{
k++;
fp[k]=st[k2-1];
st[k2-1]=st[k2];
k2--;
}
}
else
{
if(c=='(')
{
k2++;
st[k2]=maxim+5;
}
else
{
while(st[k2]!=maxim+5)
{
k++;
fp[k]=st[k2];
st[k2]=0;
k2--;
}
st[k2]=0;
k2--;
}
}
}
}
}
}
}
if(s[l-1]<='9'&&s[i-1]>='0')
{
k++;
fp[k]=val;
val=0;
}
//poland is such a joke...
while(k2!=0)
{
k++;
fp[k]=st[k2];
k2--;
}
for(i=1; i<=k; i++)
{
if(fp[i]-maxim>=1&&fp[i]-maxim<=4)
{
i2=q.top();
q.pop();
i1=q.top();
q.pop();
if(fp[i]-maxim==1)
{
q.push(i1+i2);
}
else
{
if(fp[i]-maxim==2)
{
q.push(i1-i2);
}
else
{
if(fp[i]-maxim==3)
{
q.push(i1*i2);
}
else
{
if(fp[i]-maxim==4)
{
q.push(i1/i2);
}
}
}
}
}
else
{
q.push(fp[i]);
}
}
fout<<q.top();
}