Pagini recente » Cod sursa (job #2255129) | Cod sursa (job #1593432) | Cod sursa (job #389610) | Cod sursa (job #206525) | Cod sursa (job #632940)
Cod sursa(job #632940)
#include<stdio.h>
#include<cstring>
#define nmax 100010
struct nod{
int val;
char op;
nod *r,*l;
} *rt;
char s[nmax],*p;
char op[3][4]={"+-","*/",""};
int eval(nod *rt){
switch(rt->op){
case '+': return eval(rt->l)+eval(rt->r);
case '-': return eval(rt->l)-eval(rt->r);
case '/': return eval(rt->l)/eval(rt->r);
case '*': return eval(rt->l)*eval(rt->r);
default : return rt->val;
}
}
nod *constr_arb(int lvl){
nod *x,*y;
if(lvl==2){
if(*p=='('){
p++;
x=constr_arb(0);
p++;
}
else{
x=new nod();
while(*p>=48 && *p<=57){
x->val=x->val*10+(*p-48);
p++;
}
}
}
else{
x=constr_arb(lvl+1);
if(strchr(op[lvl],*p)){
y=new nod();
y->op=*p;
p++;
y->l=x;
y->r=constr_arb(lvl+1);
x=y;
}
}
return x;
}
int main(){
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
fgets(s,nmax,stdin);
p=s;
rt=constr_arb(0);
printf("%d",eval(rt));
return 0;
}