Cod sursa(job #2524923)

Utilizator robertkarolRobert Szarvas robertkarol Data 16 ianuarie 2020 16:44:04
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>	
#include <fstream>	
#define LMAX 100001

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int evaluate(char* &expr);
int termen(char* &expr)	;
int factor(char* &expr)	;
int number(char* &expr)	;

char s[LMAX];

int main()
{
	char *expr;

	fin >> s;
	expr = s;
	fout << evaluate(expr);
	return 0;
}

int evaluate(char* &expr)
{
	auto result = termen(expr);

	while (expr[0] == '+' || expr[0] == '-')
	{
		switch (expr[0])
		{
		case '+':
			result += termen(++expr);
			break;
		case '-':
			result -= termen(++expr);
			break;
		default:
			break;
		}
	}

	return result;
}

int termen(char* &expr)
{
	auto result = factor(expr);

	while (expr[0] == '*' || expr[0] == '/')
	{
		switch (expr[0])
		{
		case '*':
			result *= factor(++expr);
			break;
		case '/':
			result /= factor(++expr);
			break;
		default:
			break;
		}
	}

	return result;
}

int factor(char* &expr)
{
	if (expr[0] == '(')
	{
		auto result = evaluate(++expr);
		expr++;
		return result;
	}
	else
	{
		return number(expr);
	}
}

int number(char* &expr)
{
	int nr = 0;

	while (isdigit(expr[0]))
	{
		nr = nr * 10 + (expr[0] - '0');
		expr++;
	}

	return nr;
}