Cod sursa(job #2884148)

Utilizator MocalinnoMoca Andrei Catalin Mocalinno Data 2 aprilie 2022 14:36:35
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;

string const& task("evaluare");
ifstream fin(task + ".in");
ofstream fout(task + ".out");

int const N(1e5 + 5);

char s[N];
int n, i;

inline int Eval();
inline int Termen();
inline int Factor();


int main() {

    fin >> s;
    n = static_cast<int>(strlen(s));
    fout << Eval();

    return 0;
}

int Eval() {
    int res = Termen();
    while (i < n && (s[i] == '+' || s[i] == '-')) {
        ++i;
        if (s[i - 1] == '+')
            res += Termen();
        else res -= Termen();
    }
    return res;
}

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

int Factor() {
    int res = 0;
    if (isdigit(s[i])) {
        while (i < n && isdigit(s[i]))
            res = res * 10 + (s[i++] - '0');
    }
    else {
        ++i;
        res = Eval();
        ++i;
    }
    return res;
}