Pagini recente » Cod sursa (job #1419092) | Cod sursa (job #3326545) | Cod sursa (job #3312959) | Cod sursa (job #3128682) | Cod sursa (job #3311580)
#include <bits/stdc++.h>
#define LMAX 2
std::ifstream in("evaluare.in");
std::ofstream out("evaluare.out");
char op[2][4] = { "+-", "*/"};
int operation(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0;
}
}
int eval(int level, std::string &expr, int& pos) {
int left = 0, right = 0;
if (level == LMAX) {
if (expr[pos] == '(') {
pos++;
left = eval(0, expr, pos);
pos++;
} else {
while (expr[pos] >= '0' && expr[pos] <= '9') {
left = left * 10 + expr[pos] - '0';
pos++;
}
}
} else {
left = eval(level + 1, expr, pos);
while (pos < expr.size() && strchr(op[level], expr[pos])) {
char opp = expr[pos++];
right = operation(left, eval(level + 1, expr, pos), opp);
left = right;
}
}
return left;
}
int main() {
std::string expr;
in >> expr;
int pos = 0;
out << eval(0, expr, pos);
}