Cod sursa(job #882538)

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

using namespace std;

char S[100001], *p = S;

long termen();
long factor();

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

long eval() {
    long r = termen();
    while ( *p=='+' || *p=='-' ) {
        switch ( *p ) {
            case '+':
                ++p;                        // trecem peste semnul "+"
                r += termen();
                break;
            case '-':
                ++p;                        // trecem peste semnul "-"
                r -= termen();
                break;
        }
    }
    return r;
}

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

long factor() {
	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("%ld\n", K);
	return 0;
}