Cod sursa(job #3294166)

Utilizator EricDimiericdc EricDimi Data 17 aprilie 2025 22:24:41
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

const int MAX_LEN = 100'000;

char s[MAX_LEN + 1];
int p, n;

void Citire();
int Factor();
int Termen();
int Evaluare();

void Citire() {
    f.getline(s, MAX_LEN);
    n = strlen(s);
}

int Factor() {
    int f;
    if (s[p] == '(') {
        p++;
        f = Evaluare();
        p++;
    }
    else {
        f = 0;
        while (s[p] >= '0' && s[p] <= '9') {
            f = f * 10 + (s[p] - '0');
            p++;
        }
    }
    return f;
}

int Termen() {
    int t = Factor();
    while (p < n && (s[p] == '*' || s[p] == '/')) {
        p++;
        if (s[p - 1] == '*')
            t *= Factor();
        else
            t /= Factor();
    }
    return t;
}

int Evaluare() {
    int r = Termen();
    while (p < n && (s[p] == '+' || s[p] == '-')) {
        p++;
        if (s[p - 1] == '+')
            r += Termen();
        else
            r -= Termen();
    }
    return r;
}

int main() {
    Citire();
    g << Evaluare() << "\n";
    f.close();
    g.close();
    return 0;
}