Cod sursa(job #490878)

Utilizator SpiderManSimoiu Robert SpiderMan Data 8 octombrie 2010 18:05:58
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
# include <cstdio>
# include <cstring>

const char *FIN = "evaluare.in", *FOU = "evaluare.out" ;
const int MAX = 100005 ;

char op[4][4] = { "+-", "*/", "^", "" } ;

char S[MAX], *p = S ;

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

int solve ( int lev ) {
	int x, y ;

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

int main ( void ) {
	fgets ( S, MAX, fopen ( FIN, "r" ) ) ;
	fprintf ( fopen( FOU, "w" ), "%d", solve ( 0 ) ) ;
}