Cod sursa(job #3173551)

Utilizator AleXutzZuDavid Alex Robert AleXutzZu Data 23 noiembrie 2023 08:57:02
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>

std::string expr;
int ptr = 0;

int term();

int expression();

int factor();

int constant();


int expression() {
    int ans = term();
    while (expr[ptr] == '+' || expr[ptr] == '-') {
        ptr++;
        if (expr[ptr - 1] == '+') ans += term();
        else if (expr[ptr - 1] == '-') ans -= term();
    }
    return ans;
}

int term() {
    int ans = factor();
    while (expr[ptr] == '*' || expr[ptr] == '/') {
        ptr++;
        if (expr[ptr - 1] == '*') ans *= factor();
        else if (expr[ptr - 1] == '/') ans /= factor();
    }
    return ans;
}

int factor() {
    int ans = 0;
    if (expr[ptr] == '(') {
        ptr++;
        ans = expression();
        ptr++;
    } else ans = constant();
    return ans;
}

int constant() {
    int ans = 0;
    while (std::isdigit(expr[ptr])) {
        ans = ans * 10 + (expr[ptr] - '0');
        ptr++;
    }
    return ans;
}

int main() {
    std::ifstream input("evaluare.in");
    std::ofstream output("evaluare.out");

    input >> expr;
    output << expression();
    return 0;
}