Pagini recente » Cod sursa (job #752800) | Cod sursa (job #1837188) | Cod sursa (job #1335359) | Cod sursa (job #1604574) | Cod sursa (job #2289472)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int st[100005];
char s[100005];
/*
'(' = -1;
'+' = -2;
'-' = -3;
'*' = -4;
'/' = -5;
*/
int main()
{
int i, top = 0, nr, semn = 1, ori = 0, cat = 0, p, sol = 0, j;
fin >> s;
for(i = 0; s[i]; )
{
if(s[i] == '(')
st[++top] = 1000000001, i++;
if(s[i] == '+')
i++;
if(s[i] == '-')
semn = -1, i++;
if(s[i] == '*')
ori = 1, i++;
if(s[i] == '/')
cat = 1, i++;
if('0' <= s[i] && s[i] <= '9')
{
nr = 0;
while('0' <= s[i] && s[i] <= '9')
nr = nr * 10 + (s[i] - '0'), i++;
if(semn == -1)
nr *= semn, semn = 1;
if(ori == 1)
st[top] = st[top] * nr, ori = 0;
else if(cat == 1)
st[top] = st[top] / nr, cat = 0;
else st[++top] = nr;
}
if(s[i] == ')')
{
p = top;
while(p > 0 && st[p] != 1000000001)
p--;
p++;
st[p - 1] = 0;
for(j = p; j <= top; j++)
st[p - 1] += st[j];
top = p - 1;
i++;
}
}
for(i = 1; i <= top; i++)
sol += st[i];
fout << sol << "\n";
fin.close();
fout.close();
return 0;
}