Cod sursa(job #1414207)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 2 aprilie 2015 13:59:02
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

#define NMax 100010

using namespace std;

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

int ind;
char expr[NMax];

long long fact();
long long term();

long long eval()
{
	long long res = fact();

	while (expr[ind] == '+' || expr[ind] == '-') {
		if (expr[ind] == '+') {
			ind++;
			res += fact();
		}
		else {
			ind++;
			res -= fact();
		}
	}

	return res;
}

long long fact()
{
	long long res = term();

	while (expr[ind] == '*' || expr[ind] == '/') {
		if (expr[ind] == '*') {
			ind++;
			res *= term();	
		}
		else {
			ind++;
			res /= term();
		}
	}

	return res;
}

long long term()
{
	long long res=0;

	if (expr[ind] == '(') {
		ind++;
		res = eval();
		ind++;
	}
	else {
		while (expr[ind] >= '0' && expr[ind] <= '9') {
			res = res * 10 + (expr[ind] - '0');
			ind++;
		}
	}

	return res;
}

int main()
{
	f.getline(expr, 100010);
	
	long long res = eval();
	
	g << res;
	return 0;
}