Cod sursa(job #479037)

Utilizator barneystinsonBarney barneystinson Data 21 august 2010 23:57:33
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <cstdio>
#include <cstring>
#define NN 100005
#define LMAX 2

char S[NN],*p=S,op[2][3]={"+-","*/"};

int eval( int a,int b, char op ){
	switch ( op ) {
		case '+' : return a+b;
		case '-' : return a-b;
		case '*' : return a*b;
		case '/' : return a/b;
	}
}

int expr( int lev ){
	int x, y;
	
	if( lev == LMAX ){
		if( *p == '('){
			++p, x = expr( 0 ) ,++p;
		}
		else {
			for( x=0; *p>='0' && *p<='9'; p++ ){
				x= x*10 + *p-'0';
			}
		}
	}
	else {
		for( x=expr(lev+1) ; strchr(op[lev],*p) ; x=y){
			y= eval(x , expr(lev+1), *p++);
		}
	}
	
	return x;
}

int main(){
	
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	gets(S);
	printf("%d",expr(0));
	return 0;
}