Cod sursa(job #882531)

Utilizator swim406Teudan Adina swim406 Data 19 februarie 2013 10:34:29
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<stdio.h>

using namespace std;

char S[100001], *p = S;

long long termen();
long long factor();

long long eval() {
	long long r = termen();
	if (*p == '+' || *p == '-') {
		switch (*p) {
			case '+' :
				++p;
				r += termen();
				break;
			case '-' :
				++p;
				r -= termen();
				break;
		}
	}
	return r;
}

long long termen() {
	long long r = factor();
	if (*p == '/' || *p == '*') {
		switch (*p) {
			case '*':
				++p;
				r *= factor();
				break;
			case '/':
				++p;
				r /= factor();
				break;
		}
	}
	return r;
}

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

int main() {
	freopen ("evaluare.in", "r", stdin);
	freopen ("evaluare.out", "w", stdout);
	scanf("%s", &S);
	long long K = eval();
	printf("%lld", K);
	return 0;
}