Pagini recente » Cod sursa (job #2493924) | Cod sursa (job #965055) | Cod sursa (job #2123785) | Cod sursa (job #145058) | Cod sursa (job #2825150)
#include <fstream>
#include <deque>
#include <string>
#define ll long long
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
ll n, m=0, i, j,sum=0,a,b;
string s;
deque <ll> v, res;
int main()
{
cin >> s;
//s = '(' + s;
s.insert(s.begin(),'(');
s.push_back(')');
//cout<<s;
n = s.size();
//cout<<n;
for (i=0;i<n;++i)
{
// cout<<s[i-1]<<" ";
if (s[i] == '(') v.push_front(-5);
else if (s[i] == ')')
{
while (!v.empty() && v[0] != -5)
{
res.push_back(v[0]);
if (!v.empty()) v.pop_front();
}
if (!v.empty()) v.pop_front();
}
else if (s[i]=='+'||s[i]=='-')
{
while (!v.empty()&& v[0]!=-5)
{
res.push_back(v[0]);
if (!v.empty()) v.pop_front();
}
if (s[i]=='+') v.push_front(-1);
else v.push_front(-3);
}
else if (s[i]=='*'||s[i]=='/')
{
while (!v.empty()&&v[0]%2==0)
{
res.push_back(v[0]);
if (!v.empty()) v.pop_front();
}
if (s[i]=='*') v.push_front(-2);
else v.push_front(-4);
}
else
{
m*=10;
m+=s[i]-48;
if (s[i+1]<48||s[i+1]>57)
{
res.push_back(m);
m=0;
}
}
}
//for (auto e:res) cout<<e<<" ";
v.clear();
while (!res.empty())
{
if (res[0]>=0)
{
v.push_front(res[0]);
res.pop_front();
}
else
{
a=v[1];
b=v[0];
v.pop_front();
v.pop_front();
j=res[0];
res.pop_front();
if (j==-1) v.push_front(a+b);
else if (j==-2) v.push_front(a*b);
else if (j==-3) v.push_front(a-b);
else v.push_front(a/b);
}
}
cout<<v[0];
return 0;
}