Cod sursa(job #623127)

Utilizator toniobFMI - Barbalau Antonio toniob Data 19 octombrie 2011 11:15:00
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
using namespace std;

ifstream in ("evaluare.in");
ofstream out ("evaluare.out");

const int N = 100003;
char s[N], *p;

void citire () {
	in.getline (s, N);
	p = s;
}

int expresie ();
int termen ();
int factor ();

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

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

int factor () {
	int val = 0;
	if (*p == '(') {
		++p;
		val = expresie ();
		++p;
		return val;
	}
	if (*p == '-') {
		val = -1;
		++p;
	}
	while (*p >= '0' && *p <= '9') {
		val = val * 10 + (*p - '0');
		++p;
	}
	return val;
}

int main () {
	citire ();
	out << expresie () << '\n';
	return 0;
}