Cod sursa(job #3302749)

Utilizator AndreiRares1801Acatrini Rares Andrei AndreiRares1801 Data 10 iulie 2025 15:35:31
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
using namespace std;

#ifdef LOCAL
#define fin cin
#define fout cout
#else
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
#endif
#define int long long int
string s;
int i=0;

int eval();

int fact() {
	int rez = 0;
	if (s[i] == '(') {
		i++;
		rez = eval();
		i++;
		return rez;
	}
	while (i < s.size() && s[i] >= '0' && s[i] <= '9') {
		rez = rez * 10 + s[i] - '0';
		i++;
	}
	return rez;
}

int term() {
	int rez = fact();
	while (i < s.size() && (s[i] == '*' || s[i] == '/')) {
		if (s[i] == '*') {
			i++;
			rez *= fact();
		}
		else {
			i++;
			rez /= fact();
		}
	}
	return rez;
}

int eval() {
	int rez = term();
	while (i < s.size() && (s[i] == '+' || s[i] == '-')) {
		if (s[i] == '+') {
			i++;
			rez += term();
		}
		else {
			i++;
			rez -= term();
		}
	}
	return rez;
}

int32_t main() {
	fin >> s;
	fout << eval();
}