Pagini recente » Cod sursa (job #1224952) | Cod sursa (job #1331836) | Cod sursa (job #1327847) | Cod sursa (job #112298) | Cod sursa (job #641293)
Cod sursa(job #641293)
#include<cstdio>
#include<cstring>
using namespace std;
struct nod{
int val;
char op;
nod *l, *r;
nod(int a = 0, char b = 0, nod *c = 0, nod *d = 0) :
val(a), op(b), l(c), r(d) {}
} *E;
char op[3][3] = { "+-", "*/"};
char expresie[100001], *p;
nod *expr(int niv){
nod *x, *y;
if (niv == 2)
if (*p == '(') ++p, x = expr(0), ++p;
else for (x = new nod(); *p >= '0' && *p <= '9'; ++p)
x -> val = x -> val * 10 + *p - '0';
else for (x = expr(niv + 1); *p && strchr(op[niv], *p); x = y)
y = new nod (0, *p++, x, expr(niv + 1));
return x;
}
int eval(nod *t){
if (t->op) switch (t->op){
case '+': return eval(t->l) + eval(t->r);
case '-': return eval(t->l) - eval(t->r);
case '*': return eval(t->l) * eval(t->r);
case '/': return eval(t->l) / eval(t->r);
}
return t->val;
}
int main(){
freopen ("evaluare.in", "r", stdin);
freopen ("evaluare.out", "w", stdout);
scanf ("%s", expresie), p = expresie;
E = expr(0);
printf("%d\n", eval(E));
return 0;
}