Cod sursa(job #538497)

Utilizator Addy.Adrian Draghici Addy. Data 21 februarie 2011 16:23:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>

#define NMAX 100050

char S[NMAX], *p;

int evaluare (), termen (), factor ();

int main () {
	
	freopen ("evaluare.in", "r", stdin);
	freopen ("evaluare.out", "w", stdout);
	
	scanf ("%s", S); p = S;
	
	printf ("%d", evaluare ());
	
	return 0;
}

int evaluare () {
	
	int sol = termen ();
	
	while (*p == '+' || *p == '-') {
		if (*p == '+')
			p++, sol += termen ();
		else
			p++, sol -= termen ();
	}
	
	return sol;
}

int termen () {
	
	int sol = factor ();
	
	while (*p == '*' || *p == '/') {
		if (*p == '*')
			p++, sol *= factor ();
		else
			p++, sol /= factor ();
	}
	
	return sol;
}

int factor () {
	
	int sol = 0;
	
	if (*p == '(')
		p++, sol = evaluare (), p++;
	else {
		while (*p >= '0' && *p <= '9')
			sol = sol * 10 + (*p - '0'), p++;
	}
	
	return sol;
}