Cod sursa(job #3141036)

Utilizator daristyleBejan Darius-Ramon daristyle Data 11 iulie 2023 21:16:23
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>

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

const int STRLEN_MAX = 1e5;
const int CHARACTERS = 128;
char priority[CHARACTERS];
char s[STRLEN_MAX + 1];
int sIndex;

void PrecomputePriority() {
	for(auto i: priority)
		i = 0;

	priority['+'] = priority['-'] = 1;
	priority['*'] = priority['/'] = 2;
}

int addition();

int factor() {
	int num = 0;
	if(s[sIndex] == '('){
		++sIndex;
		num = addition();
		++sIndex;
	}else
		while(isdigit(s[sIndex]))
			num = num * 10 + s[sIndex++] - '0';

	return num;
}

int multiply() {
	int result = factor();

	while(priority[s[sIndex]] == 2)
		if(s[sIndex] == '*'){
			++sIndex;
			result *= factor();
		}else{
			++sIndex;
			result /= factor();
		}

	return result;
}

int addition() {
	int result = multiply();
	while(priority[s[sIndex]] == 1)
		if(s[sIndex] == '+'){
			++sIndex;
			result += multiply();
		}else{
			++sIndex;
			result -= multiply();
		}

	return result;
}

int main() {
	PrecomputePriority();
	fin >> s;

	sIndex = 0;
	fout << addition() << '\n';

	fin.close();
	fout.close();
	return 0;
}