Cod sursa(job #386343)

Utilizator BaduBadu Badu Badu Data 24 ianuarie 2010 18:11:41
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<cstdio>
#define max 100010


char S[max];
char *p=S;

long  sub();
long  prod();

long eval(){
	long r = prod();
	
	while(  *p == '+' || *p == '-'){
		switch( *p){
		case '+':
			++p;
			r += prod();
			break;
	    case  '-':
			++p;
			r -= prod();
			break;
		
	}
	}
		
	return r;
	
}

long prod(){
	
	long r = sub();
	
	while(  *p == '*' || *p == '/'){
		switch( *p){
		case '*':
			++p;
			r *= sub();
			break;
			
			
		case '/':
		 
			++p;
			r /= sub();
			break;
			
		}
	}
		
		return r;
}

long  sub(){
	long r = 0;
	 if( *p == '(') {
		 ++p;
		 eval();
		 ++p;
	 }
	 else
		 while(*p >= '0' && *p <='9') {r = r*10 + *p - '0';++p;}
	 
	 return r;
}

int main(){
	

		FILE *f=fopen("evaluare.in","r");
		FILE *g=fopen("evaluare.out","w");
		
		fgets( S, max, f);
		
		fprintf(g,"%ld\n", eval() );

	return 0;
}