Cod sursa(job #201271)

Utilizator tvladTataranu Vlad tvlad Data 30 iulie 2008 07:48:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>

const int E_MAX = 100001;

char e[E_MAX];
char *p;

int termen();
int factor();

int eval() {
	int r = termen();
	while (*p == '+' || *p == '-') {
		++p;
		if (*(p-1) == '+')
			r += termen(); else
			r -= termen();
	}
	return r;
}

int termen() {
	int r = factor();
	while (*p == '*' || *p == '/') {
		++p;
		if (*(p-1) == '*')
			r *= factor(); else
			r /= factor();
	}
	return r;
}

int factor() {
	int r = 0;
	if (*p == '(') {
		++p;
		r = eval();
		++p;
	} else {
		for (; '0' <= *p && *p <= '9'; ++p) r = r * 10 + *p - '0';
	}
	return r;
}

int main() {
	freopen("evaluare.in","rt",stdin);
	freopen("evaluare.out","wt",stdout);
	fgets(e,E_MAX,stdin);
	p = e;
	printf("%d\n",eval());
	return 0;
}