Cod sursa(job #3302258)

Utilizator prodsevenStefan Albu prodseven Data 5 iulie 2025 13:51:54
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <string>

using namespace std;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

string s;

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

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

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

int factor(string &s, int &p) {
    if (s[p] == '(') {
        ++p;
        int rez = expresie(s, p);
        ++p;
        return rez;
    }
    return numar(s, p);
}

int numar(string &s, int &p) {
    int n = 0;
    while (s[p] - '0' >= 0 && s[p] - '0' <= 9) {
        n = n * 10 + (s[p] - '0');
        ++p;
    }
    return n;
}

int main() {
    cin >> s;
    int p = 0;
    cout << expresie(s, p);
    return 0;
}