Pagini recente » Cod sursa (job #2946264) | Cod sursa (job #1339402) | Cod sursa (job #1458918) | Cod sursa (job #910986) | Cod sursa (job #1199154)
#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()
{
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;
}