Cod sursa(job #386321)

Utilizator BaduBadu Badu Badu Data 24 ianuarie 2010 17:11:03
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>
#define max 100005


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

long int sub();
long int prod();

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

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

long int  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;
}