Pagini recente » Cod sursa (job #283503) | Cod sursa (job #1395454) | Cod sursa (job #1364716) | Cod sursa (job #96228) | Cod sursa (job #1199156)
#include <iostream>
#include <cstdio>
#include <array>
#include <cctype>
using namespace std;
array<int, 256> precedence;
string::const_iterator it;
int apply(char op, int x, int y)
{
switch (op) {
case '+': return x+y;
case '-': return x-y;
case '*': return x*y;
case '/': return x/y;
default: return 0;
}
}
int eval(int level)
{
if (level > 2) {
if (*it == '(') {
++it;
int res = eval(1);
++it;
return res;
}
else {
int res = 0;
while (isdigit(*it)) {
res = res*10+*it-'0';
++it;
}
return res;
}
}
else {
int res = eval(level+1);
while (precedence[*it] == level) {
char op = *it;
++it;
res = apply(op, res, eval(level+1));
}
return res;
}
}
int main()
{
ios::sync_with_stdio(false);
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
precedence['+'] = 1;
precedence['-'] = 1;
precedence['*'] = 2;
precedence['/'] = 2;
string expr;
getline(cin, expr);
expr += '\0';
it = expr.begin();
printf("%d\n", eval(1));
return 0;
}