Cod sursa(job #342736)

Utilizator digital_phreakMolache Andrei digital_phreak Data 23 august 2009 11:32:19
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <string>
#include <cstring>

using namespace std;

const long MAX = 100001;
char S[MAX],*p = S;
long termen();long factor();

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

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

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

int main() {

	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	
	fgets(S,MAX,stdin);
	long r = eval();
	printf("%ld\n",r);
	
	fclose(stdin);
	fclose(stdout);

	return 0;
}