Cod sursa(job #479050)

Utilizator SpiderManSimoiu Robert SpiderMan Data 22 august 2010 01:36:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <cstdio>
#include <cstring>
#define NN 100005
#define LMAX 2

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

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);
	fgets(S,NN,stdin);
	printf("%d",expr(0));
	return 0;
}