Cod sursa(job #3155532)

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

using namespace std;

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

char str[100003];
int i = 0;

int expresie();
int termen();
int factor();
int constanta();

int main() {

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

    return 0;
}

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

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

    return res;
}

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

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

    return res;
}

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

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