Cod sursa(job #1392448)

Utilizator PatrikStepan Patrik Patrik Data 18 martie 2015 17:43:17
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<stdio.h>

#define LMAX 1000001

char s[LMAX];
int i;

int eval();
int termen();
int factor();

int main()
{
	freopen("evaluare.in" , "r" , stdin);
	freopen("evaluare.out" , "w" , stdout );

	scanf("%s" , s);
	printf("%d\n" , eval());
	return 0;

}

int eval()
{
	int t = termen();
	while(s[i] && ( s[i] == '+'  || s[i] == '-' ) )
		switch(s[i]){
		case '+' :
			i++;
			t += termen();
			break;
		case '-':
			i++;
			t -= termen();
			break;
		}
	return t;
}

int termen()
{
	int f = factor();
	while(s[i] && ( s[i] == '*' || s[i] == '/') )
		switch( s[i] ){
		case '*' :
			i++;
			f *= factor();
			break;
		case '/':
			i++;
			f/=factor();
			break;
		}
	return f;
}

int factor()
{
	int r;
	if(s[i] == '(' ){
		i++;
		r = eval();
		i++;
		return r;
	}
	r = 0;
	while(s[i] >= '0' && s[i] <= '9')
		r = r*10 + s[i++]-48;
	return r;
}