Cod sursa(job #3311580)

Utilizator EduardoDinutaDinuta Eduard Stefan EduardoDinuta Data 23 septembrie 2025 12:46:55
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define LMAX 2

std::ifstream in("evaluare.in");
std::ofstream out("evaluare.out");

char op[2][4] = { "+-", "*/"};

int operation(int a, int b, char op) {
    switch (op) {
        case '+': return a + b;
		case '-': return a - b;
		case '*': return a * b;
		case '/': return a / b;
        default: return 0;
    }
    
}

int eval(int level, std::string &expr, int& pos) {
    int left = 0, right = 0;

    if (level == LMAX) {
        if (expr[pos] == '(') {
            pos++;
            left = eval(0, expr, pos);
            pos++;
        } else {
            while (expr[pos] >= '0' && expr[pos] <= '9') {
                left = left * 10 + expr[pos] - '0';
                pos++;
            }
        }
    } else {
        left = eval(level + 1, expr, pos);
        while (pos < expr.size() && strchr(op[level], expr[pos])) {
            char opp = expr[pos++];
            right = operation(left, eval(level + 1, expr, pos), opp);
            left = right;
        } 
    }

    return left;
}

int main() {
    std::string expr;

    in >> expr;

    int pos = 0;
    out << eval(0, expr, pos);
}