Pagini recente » Cod sursa (job #1280833) | Cod sursa (job #95827) | Cod sursa (job #2072817) | Cod sursa (job #1324825) | Cod sursa (job #641290)
Cod sursa(job #641290)
#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[4][4] = { "+-", "*/", "^", "" };
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){
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;
}