Pagini recente » Cod sursa (job #2902319) | Cod sursa (job #59259) | Cod sursa (job #2613036) | Cod sursa (job #2583638) | Cod sursa (job #1827166)
#include <bits/stdc++.h>
#define NMax 100002
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char op[4][4] = {"+-","*/",""};
struct node{
int val;
char op;
node *l, *r;
node(int a,char b, node *c, node *d){
val = a;op = b;l = c; r = d;
};
}*ET;
char x[NMax];
char *p;
node *build(int lev){
node *x , *y;
if(lev == 2){
if(*p == '('){
p++;
x = build(0);
p++;
}else{
for(x = new node(0,0,0,0); *p >= '0' && *p <= '9'; ++p){
x->val = x->val * 10 + *p - '0';
}
}
}else{
x = build(lev + 1);
for(;strchr(op[lev],*p);x = y){
y = new node(0,*p++,x,build(lev + 1));
}
}
return x;
}
int eval(node *x){
if(x->op == '+')return eval(x->l) + eval(x->r);
if(x->op == '-')return eval(x->l) - eval(x->r);
if(x->op == '*')return eval(x->l) * eval(x->r);
if(x->op == '/')return eval(x->l) / eval(x->r);
return x->val;
}
int main()
{
f.getline(x,NMax);
x[strlen(x)] = '\n';
p = x;
ET = build(0);
g << eval(ET) << '\n';
return 0;
}