Cod sursa(job #822202)

Utilizator MciprianMMciprianM MciprianM Data 22 noiembrie 2012 23:32:53
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;

const int MAXN = 100009;
char s[MAXN];
int cursor;

int eval();
int eval2();
int eval3();

int eval3() {
	int t(0);
	if(s[cursor] == '(') {
		++cursor;
		t = eval();
		++cursor;
	}
	else {
		while(isdigit(s[cursor])) {
			t = t * 10 + s[cursor] - '0';
			++cursor;
		}
	}
	return t;
}

int eval2() {
	int t = eval3();
	while(s[cursor] == '*' || s[cursor] == '/') {
		if(s[cursor] == '*') {
			++cursor;
			t *= eval3();
		}
		else {
			++cursor;
			t /= eval3();
		}
	}
	return t;
}

int eval() {
	int t = eval2();
	while(s[cursor] == '+' || s[cursor] == '-') {
		if(s[cursor] == '+') {
			++cursor;
			t += eval2();
		}
		else {
			++cursor;
			t -= eval2();
		}
	}
	return t;
}

int main () {
	ifstream f("evaluare.in");
	f >> s;
	f.close();
	ofstream g("evaluare.out");
	g << eval() << endl;
	g.close();
	return 0;
}