Cod sursa(job #632940)

Utilizator DaicuDaicu Alexandru Daicu Data 12 noiembrie 2011 15:57:44
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#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;
}