Cod sursa(job #387338)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 27 ianuarie 2010 13:10:31
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#include<string.h>

#define N 100002

int i, lg;
char s[N];

int EvalFactor(), EvalTermen(), EvalExp();

int EvalFactor(){
int f;
	if (s[i] == '('){
		i++;
		f = EvalExp(); 
		i++;
	}
	else{
		for (f = 0; s[i] >= '0' && s[i] <= '9'; i++)
			f = f*10 + (s[i] - '0'); 
	}
	return f;
}

int EvalTermen(){
int r = EvalFactor();
	while (i <= lg && (s[i]=='*' || s[i] == '/')){
		i++;
		if (s[i-1] == '*') r *= EvalFactor();
		else	r /= EvalFactor(); 
	}
	return r;
}

int EvalExp(){
int r = EvalTermen();
	while (i <= lg && (s[i] == '+' || s[i] == '-')){
		i++;
		if (s[i-1] == '+') r += EvalTermen();
		else	r -= EvalTermen();
	} 
	return r;
}

int main(){
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	
	scanf("%s", s+1);
	lg = strlen(s+1);
	
	i = 1;
	printf("%d", EvalExp());
	
	return 0;
}