Pagini recente » Cod sursa (job #921385) | Cod sursa (job #2451817) | Cod sursa (job #1290075) | Cod sursa (job #874145) | Cod sursa (job #1785258)
#include <bits/stdc++.h>
using namespace std;
char S[100005];
char *p = S;
char L[3][3] = {
"+-",
"/*",
""
};
bool ok(int level, char op) {
return strchr(L[level], op) != NULL;
}
int op(int x, int y, char op) {
if (op == '+') return x + y;
if (op == '-') return x - y;
if (op == '/') return x / y;
if (op == '*') return x * y;
assert(false);
return -1;
}
int eval(int lvl) {
if (lvl == 2) {
if (*p == '(') {
p++;
int x = eval(0);
p++;
return x;
} else {
int x = 0;
while (*p >= '0' && *p <= '9') {
x = x * 10 + (*p) - '0';
p++;
}
return x;
}
} else {
int x = eval(lvl + 1);
while (*p && ok(lvl, *p)) {
char k = *p;
p++;
x = op(x, eval(lvl + 1), k);
}
return x;
}
}
int main() {
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", S);
printf("%d\n", eval(0));
return 0;
}