Cod sursa(job #2091877)

Utilizator inquisitorAnders inquisitor Data 20 decembrie 2017 14:54:31
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <string>

using namespace std;

char expression[1 << 17];
char *p = expression;

int Term();
int Factor();

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

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

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

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

int Factor()
{
	int result = 0;

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

	return result;
}

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

	scanf("%s", expression);

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

	return 0;
}