Cod sursa(job #1377299)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 5 martie 2015 21:05:04
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb

#include <fstream>
#include <cctype>

const int MAX_SIZE(100001);

char String [MAX_SIZE];
int Index;

int Priority1 (void);
int Priority2 (void);
int Priority3 (void);

int Priority1 (void)
{
	int result(Priority2());
	while (String[Index] == '+' || String[Index] == '-')
		if (String[Index] == '+')
		{
			++Index;
			result += Priority2();
		}
		else
		{
			++Index;
			result -= Priority2();
		}
	return result;
}

int Priority2 (void)
{
	int result(Priority3());
	while (String[Index] == '*' || String[Index] == '/')
		if (String[Index] == '*')
		{
			++Index;
			result *= Priority3();
		}
		else
		{
			++Index;
			result /= Priority3();
		}
	return result;
}

int Priority3 (void)
{
	int result(0);
	if (String[Index] == '(')
	{
		++Index;
		result = Priority1();
		++Index; // Skip the ')'
	}
	else
		while (std::isdigit(String[Index]))
		{
			result = result * 10 + String[Index] - '0';
			++Index;
		}
	return result;
}

int main (void)
{
	std::ifstream input("evaluare.in");
	input >> String;
	input.close();
	std::ofstream output("evaluare.out");
	output << Priority1() << '\n';
	output.close();
	return 0;
}