Cod sursa(job #2592720)

Utilizator RobertLearnsCDragomir Robert. RobertLearnsC Data 2 aprilie 2020 11:02:18
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <bits/stdc++.h>

using namespace std;

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

string expression;
int expIndex;

int terms();
int calculateInteger();

int calculateExpression() {
    int answer = terms();

    while(expression[expIndex] == '+' || expression[expIndex] == '-') {
        if(expression[expIndex] == '+') {
            ++expIndex;
            answer += terms();
        } else {
            ++expIndex;
            answer -= terms();
        }
    }
    ++expIndex;

    return answer;
}

int terms() {
    int makeProduct = calculateInteger();
    while(expression[expIndex] == '*' || expression[expIndex] == '/') {
        if(expression[expIndex] == '/') {
            ++expIndex;
            makeProduct /= calculateInteger(); /// calculateInteger va returna coeficientul de impartire
        } else {
            ++expIndex;
            makeProduct *= calculateInteger(); /// coeficient de inmultire
        }
    }
    /// daca n-am trecut prin acel while inseamna ca am avut o secvente de simple adunari si scaderi
    return makeProduct;
}

int calculateInteger() {
    int next_integer = 0;

    if(expression[expIndex] == '(') {
        ++expIndex;
        return calculateExpression();
    }
    while(expression[expIndex] >= '0' && expression[expIndex] <= '9' && expIndex < expression.length()) {
        next_integer = next_integer * 10 + (expression[expIndex] - '0');
        ++expIndex;
    }
    return next_integer;
}

int main()
{
    in >> expression;
    out << calculateExpression();
    return 0;
}