Cod sursa(job #2091881)

Utilizator inquisitorAnders inquisitor Data 20 decembrie 2017 15:02:10
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>

using namespace std;

int Evaluate(), Term(), Factor();

char expression[1 << 17], *i = expression;

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

	scanf("%s", expression);

	printf("%d", Evaluate());

	return 0;
}

int Evaluate()
{
	int result = Term();

	while (true)
	{
		switch (*i)
		{
			case '+':
				i++;
				result += Term();
				break;
			case '-':
				i++;
				result -= Term();
				break;
			default :
				return result;
		}
	}
}

int Term()
{
	int result = Factor();

	while (true)
	{
		switch (*i)
		{
		case '*':
			i++;
			result *= Factor();
			break;
		case '/':
			i++;
			result /= Factor();
			break;
		default:
			return result;
		}
	}
}

int Factor()
{
	int result = 0;

	if(*i == '(')
	{
		i++;
		result = Evaluate();
		i++;
	}
	else
	{
		while (*i >= '0' && *i <= '9')
		{
			result = result * 10 + *i - '0';
			i++;
		}
	}

	return result;
}