Cod sursa(job #2793728)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 3 noiembrie 2021 22:28:09
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#include <bits/stdc++.h>

using namespace std;

// Sum = Product +- Product +- Product
// Product = Element /* Element /* ...
// Element = Number or (Sum)

class Evaluator {
private:
    string expression;
    int index = 0;
public:
    Evaluator(const string &_expression) : expression(_expression) {}

    int getSum() {
        int sum = getProduct();
        while(index < expression.size() && (expression[index] == '+' || expression[index] == '-')) {
            if(expression[index] == '+') {
                index ++;
                sum += getProduct();
            } else {
                index ++;
                sum -= getProduct();
            }
        }
        return sum;
    }

    int getProduct() {
        int product = getElement();
        while(index < expression.size() && (expression[index] == '*' || expression[index] == '/')) {
            if(expression[index] == '*') {
                index ++;
                product *= getElement();
            } else {
                index ++;
                product /= getElement();
            }
        }
        return product;
    }

    int getElement() {
        int answer;
        if(expression[index] == '(') {
            index ++;
            answer = getSum();
            index ++;
        } else {
            answer = getNumber();
        }
        return answer;
    }

    int getNumber() {
        int number = 0;
        while(index < expression.size() && '0' <= expression[index] && expression[index] <= '9') {
            number *= 10;
            number += (expression[index] - '0');
            index ++;
        }
        return number;
    }
};

int main() {
    ifstream in("evaluare.in");
    ofstream out("evaluare.out");

    string s;
    in >> s;
    Evaluator solver(s);
    out << solver.getSum();

    return 0;
}