Pagini recente » Cod sursa (job #662208) | Cod sursa (job #2334954) | Cod sursa (job #2556266) | Cod sursa (job #1568984) | Cod sursa (job #1302491)
#define IA_PROB "evaluare"
#include <cstdio>
#include <cstring>
#include <fstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define MAX_LEVEL 2
int op_level(char op)
{
switch (op) {
case '+':
case '-':
return 0;
case '*':
case '/':
return 1;
default:
return MAX_LEVEL;
}
}
int op_eval(char op, int a, int b)
{
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default:
throw new exception();
}
}
int expr_eval(char *&p, int level)
{
int res;
if (level < MAX_LEVEL) {
res = expr_eval(p, level + 1);
while (op_level(*p) == level) {
char op = *p;
p++;
int b = expr_eval(p, level + 1);
res = op_eval(op, res, b);
}
} else {
if (*p == '(') {
p++;
res = expr_eval(p, 0);
p++; /* to skip over ')' */
} else {
res = 0;
while (*p >= '0' && *p <= '9') {
res = res * 10 + *p - '0';
p++;
}
}
}
return res;
}
int main()
{
ifstream in(IA_PROB".in");
ofstream out(IA_PROB".out");
string s;
in>>s;
char *p = (char*)s.c_str();
out<<expr_eval(p, 0)<<endl;
return 0;
}