Cod sursa(job #442416)

Utilizator nashnash mit nash Data 14 aprilie 2010 14:45:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <string.h>

#define NMAX 100010
char str[NMAX],*p=str;

typedef enum Level {
	EXP=0,TER,FAC
}Level;

int proc(Level level) {
	int rez = 0;
	if(level == EXP){
		rez = proc(TER);
		while(*p=='+'||*p=='-'){
			if(*p=='+') { ++p; rez += proc(TER); }
			if(*p=='-') { ++p; rez -= proc(TER); }
		}
	}
	if(level == TER){
		rez = proc(FAC);
		while(*p=='*'||*p=='/'){
			if(*p=='*') { ++p; rez *= proc(FAC); }
			if(*p=='/') { ++p; rez /= proc(FAC); }
		}
	}
	if(level == FAC){
		if(*p=='(')
			++p , rez = proc(EXP) , ++p;
		else
			while(*p>='0' && *p<='9')
				rez = rez*10 + *p-'0' , ++p;
	}
	return rez;
}

int main(){
	
	freopen("evaluare.in","rb",stdin);
	freopen("evaluare.out","w",stdout);
	
	fread(str, sizeof(char), NMAX, stdin);
	printf("%d \n",proc(EXP));
	
	return 0;
}