Pagini recente » Istoria paginii runda/cv1101/clasament | Istoria paginii runda/simoni-11-12 | Istoria paginii runda/bomba1/clasament | Istoria paginii runda/simulare-cartita-43 | Cod sursa (job #2022145)
#include <bits/stdc++.h>
using namespace std;
stack <int> s;
vector <int> v;
char ch[100002];
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
int i,nr,aux;
scanf("%s",&ch);
for(i=0;i<strlen(ch);++i)
{
if(isdigit(ch[i]))
{
nr=atoi(ch+i);
while(isdigit(ch[i]))
++i;
--i;
v.push_back(nr);
continue;
}
if(ch[i]=='(')
s.push(ch[i]);
if(ch[i]=='+'||ch[i]=='-'||ch[i]==')')
{
while(!(s.empty())&& s.top()!='(')
{
if(s.top()=='+')
v.push_back(-1);
if(s.top()=='-')
v.push_back(-2);
if(s.top()=='*')
v.push_back(-3);
if(s.top()=='/')
v.push_back(-4);
s.pop();
}
if(ch[i]==')')
{
s.pop();
continue;
}
s.push(ch[i]);
}
if(ch[i]=='*'||ch[i]=='/')
{
while(!(s.empty())&& s.top()!='(' &&s.top()!='+'&&s.top()!='-')
{
if(s.top()=='*')
v.push_back(-3);
if(s.top()=='/')
v.push_back(-4);
s.pop();
}
s.push(ch[i]);
}
}
while(!s.empty())
{
if(s.top()=='+')
v.push_back(-1);
if(s.top()=='-')
v.push_back(-2);
if(s.top()=='*')
v.push_back(-3);
if(s.top()=='/')
v.push_back(-4);
s.pop();
}
for(i=0;i<v.size();++i)
{
if(v[i]>=0)
s.push(v[i]);
else
{
if(v[i]==-1)
{
nr=s.top();
s.pop();
nr+=s.top();
s.pop();
s.push(nr);
}
if(v[i]==-2)
{
nr=s.top();
s.pop();
aux=s.top();
s.pop();
s.push(aux-nr);
}
if(v[i]==-3)
{
nr=s.top();
s.pop();
nr*=s.top();
s.pop();
s.push(nr);
}
if(v[i]==-4)
{
nr=s.top();
s.pop();
aux=s.top();
s.pop();
s.push(aux/nr);
}
}
}
printf("%d",s.top());
}