Cod sursa(job #673080)

Utilizator CezarMocanCezar Mocan CezarMocan Data 3 februarie 2012 20:30:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#include <iostream>

using namespace std;

string S;
int poz;

int f1();
int f2();
int f3();

int f1() {
//	fprintf(stderr, "1 %d\n", poz);
	int rez = f2();
	while (S[poz] == '+' || S[poz] == '-') {
		poz++;
		if (S[poz - 1] == '+')	rez += f2();
		else rez -= f2();
	}

	return rez;
}

int f2() {
//	fprintf(stderr, "2 %d\n", poz);
	int rez = f3();
	while (S[poz] == '*' || S[poz] == '/') {
		poz++;
		if (S[poz - 1] == '*')	rez *= f3();
		else rez /= f3();	
	}

	return rez;
}

int f3() {
//	fprintf(stderr, "3 %d\n", poz);
	int rez = 0;
	if (S[poz] == '(') {
		poz++;
		rez = f1();
		poz++;
		return rez;
	}

	while (S[poz] >= '0' && S[poz] <= '9') {
		rez = rez * 10 + S[poz] - '0';
		poz++;
	}

	return rez;
}

int main() {
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);

	cin >> S;

	cout << f1();


	return 0;
}