Pagini recente » Cod sursa (job #2604471) | Cod sursa (job #3258086) | Cod sursa (job #2672448) | Cod sursa (job #1046787) | Cod sursa (job #2188552)
#include <bits/stdc++.h>
#define MAXX 1000000000
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
string s;
int n, pl = MAXX + 1, mi = MAXX + 2, i;
int ori = MAXX + 3, di = MAXX + 4, pd = MAXX + 5, pi = MAXX + 6;
int st[100010], ls;
int fp[100010], lfp;
int x, a, b;
stack <int>q;
int main ()
{
fin >> s;
n = s.size();
i = 0;
while (i < n)
{
if (s[i] <= '9' && s[i] >= '0')
{
x = 0;
while (s[i] <= '9' && s[i] >= '0')
{
x = x*10 + s[i] - '0';
i++;
}
fp[++lfp] = x;
}
else if (s[i] == '(')
{
st[++ls] = pd;
i++;
}
else if (s[i] == '*')
{
if (st[ls] == ori || st[ls] == di)
{
fp[++lfp] = st[ls];
st[ls] = ori;
}
else if (st[ls] == pl || st[ls] == mi || st[ls] == pd || ls == 0)
st[++ls] = ori;
i++;
}
else if (s[i] == '/')
{
if (st[ls] == ori || st[ls] == di)
{
fp[++lfp] = st[ls];
st[ls] = di;
}
else if (st[ls] == pl || st[ls] == mi || st[ls] == pd || ls == 0)
st[++ls] = di;
i++;
}
else if (s[i] == '+')
{
if (st[ls] == pl || st[ls] == mi)
{
fp[++lfp] = st[ls];
st[ls] = pl;
}
else if (st[ls] == di || st[ls] == ori)
{
fp[++lfp] = st[ls];
ls--;
if (st[ls] == mi || st[ls] == pl)
{
fp[++lfp] = st[ls];
st[ls] = pl;
}
else
st[++ls] = pl;
}
else if (st[ls] == pd || ls == 0)
st[++ls] = pl;
i++;
}
else if (s[i] == '-')
{
if (st[ls] == pl || st[ls] == mi)
{
fp[++lfp] = st[ls];
st[ls] = mi;
}
else if (st[ls] == di || st[ls] == ori)
{
fp[++lfp] = st[ls];
ls--;
if (st[ls] == mi || st[ls] == pl)
{
fp[++lfp] = st[ls];
st[ls] = mi;
}
else
st[++ls] = mi;
}
else if (st[ls] == pd || ls == 0)
st[++ls] = mi;
i++;
}
else if (s[i] == ')')
{
while (st[ls]!=pd)
{
fp[++lfp] = st[ls];
ls--;
}
ls--;
i++;
}
}
while (ls > 0)
{
fp[++lfp] = st[ls];
ls--;
}
for (i=1; i<=lfp; i++)
{
if (fp[i] == pl)
{
a = q.top(); q.pop();
b = q.top(); q.pop();
q.push (a+b);
}
else if (fp[i] == mi)
{
a = q.top(); q.pop();
b = q.top(); q.pop();
q.push (b-a);
}
else if (fp[i] == ori)
{
a = q.top(); q.pop();
b = q.top(); q.pop();
q.push (a*b);
}
else if (fp[i] == di)
{
a = q.top(); q.pop();
b = q.top(); q.pop();
q.push (b/a);
}
else
q.push (fp[i]);
}
fout << q.top();
}