Cod sursa(job #3155538)

Utilizator octavian202Caracioni Octavian Luca octavian202 Data 8 octombrie 2023 15:48:05
Problema Evaluarea unei expresii Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <cstring>

#define ll long long

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

char str[100003];
ll i = 0;

ll expresie();
ll termen();
ll factor();
ll constanta();

int main() {

    fin.getline(str, 100001);
    fout << expresie();

    return 0;
}

ll expresie() {
    ll res = termen();

    while (str[i] == '+' || str[i] == '-') {
        switch (str[i]) {
            case '+':
                i++;
                res += termen();
                break;
            case '-':
                i++;
                res -= termen();
                break;
        }
    }

    return res;
}

ll termen() {
    ll res = factor();

    while (str[i] == '*' || str[i] == '/') {
        switch (str[i]) {
            case '*':
                i++;
                res *= factor();
                break;
            case '/':
                i++;
                res /= factor();
                break;
        }
    }

    return res;
}

ll factor() {
    ll res = 0;
    if (str[i] == '(') {
        i++;
        return expresie();
    }
    return constanta();
}

ll constanta() {
    ll res = 0;
    while (str[i] >= '0' && str[i] <= '9') {
        res = res * 10 + str[i] - '0';
        i++;
    }
    return res;
}