Pagini recente » Cod sursa (job #2073208) | Cod sursa (job #1086985) | Cod sursa (job #2073303) | Cod sursa (job #1483791) | Cod sursa (job #1073239)
#include <cstdio>
#include <stack>
#include <cstring>
using namespace std;
stack<char> chr;
stack<int> nbr;
inline void eval() {
int op2 = nbr.top(); nbr.pop();
int op1 = nbr.top(); nbr.pop();
char op = chr.top(); chr.pop();
switch (op) {
case '+':
nbr.push(op1+op2);
break;
case '-':
nbr.push(op1-op2);
break;
case '*':
nbr.push(op1*op2);
break;
case '/':
nbr.push(op1/op2);
break;
}
}
int main() {
int n;
char exp[100002], *c = exp;
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", exp);
while (*c) {
if (*c >= '0' && *c <= '9') {
n = 0;
while (*c >= '0' && *c <= '9') {
n = n*10-'0'+*c++;
}
nbr.push(n);
} else {
if (strchr("(+-*/", *c) != NULL) {
if (!chr.empty() && strchr("*/", chr.top()) != NULL)
eval();
chr.push(*c);
} else if (*c == ')') {
do {
eval();
} while(!chr.empty() && chr.top() != '(');
if (!chr.empty() && chr.top() == '(')
chr.pop();
}
c++;
}
}
while(!chr.empty()) {
eval();
}
printf("%d", nbr.top());
return 0;
}