Cod sursa(job #3361424)

Utilizator livliviLivia Magureanu livlivi Data 24 iulie 2026 11:02:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

int expresie(string& s, int& p, int lvl = 0);
int termen(string& s, int& p, int lvl = 0);
int factor(string& s, int& p, int lvl = 0);
int numar(string& s, int& p, int lvl = 0);

int expresie(string& s, int& p, int lvl) {
	int ans = termen(s, p, lvl + 1);
	while (p < s.size() && (s[p] == '+' || s[p] == '-')) {
		int sgn = (s[p] == '+' ? 1 : -1);
		p++;
		ans += sgn * termen(s, p, lvl + 1);
	}
	return ans;
}

int termen(string& s, int& p, int lvl) {
	int ans = factor(s, p, lvl + 1);
	while (p < s.size() && (s[p] == '*' || s[p] == '/')) {
		if (s[p] == '*') {
			p++;
			ans *= factor(s, p, lvl + 1);
		} else {
			p++;
			ans /= factor(s, p, lvl + 1);
		}
	}
	return ans;
}

int factor(string& s, int& p, int lvl) {
	int ans = 0;
	if (s[p] == '(') {
		p++;
		ans = expresie(s, p, lvl + 1);
		p++;
	} else {
		ans = numar(s, p, lvl + 1);
	}
	return ans;
}

int numar(string& s, int& p, int lvl) {
	int nr = 0;
	while (p < s.size() && isdigit(s[p])) {
		nr = nr * 10 + s[p] - '0';
		p++;
	}
	return nr;
}

int main() {
	ifstream cin("evaluare.in");
	ofstream cout("evaluare.out");
	string s; cin >> s;
	int p = 0;
	cout << expresie(s, p) << "\n";
	return 0;
}