Cod sursa(job #641290)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 27 noiembrie 2011 18:58:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#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;
}