Cod sursa(job #710176)

Utilizator andrici_cezarAndrici Cezar andrici_cezar Data 9 martie 2012 09:35:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>

char s[100100];
long i;
long termen();
long eval();
long factor () {
	long r = 0;
	if (s[i] == '(') {
		++i;
		r = eval();
		++i;
	} else {
		while (s[i] >= '0' && s[i] <= '9') {
			r = r*10 + s[i] - '0';
			++i;
		}
	}
	return r;
}

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

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


int main() {
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	
		scanf("%s", s);
		printf("%ld\n", eval());
	

		return 0;
}