Cod sursa(job #2637649)

Utilizator vladm98Munteanu Vlad vladm98 Data 23 iulie 2020 20:30:04
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;

int where = 0;
char s[100002];

int solveMultiplicationDivision();
int solveBracketsNumbers();

int solveAdditionSubtraction() {
    int value = solveMultiplicationDivision();
    while (s[where] == '+' or s[where] == '-') {
        if (s[where] == '+') {
            where += 1; //skip +
            value += solveMultiplicationDivision();
        } else {
            where += 1; //skip -
            value -= solveMultiplicationDivision();
        }
    }
    return value;
}

int solveMultiplicationDivision() {
    int value = solveBracketsNumbers();
    while (s[where] == '*' or s[where] == '/') {
        if (s[where] == '*') {
            where += 1; //skip *
            value *= solveBracketsNumbers();
        } else {
            where += 1; //skip /
            value /= solveBracketsNumbers();
        }
    }
    return value;
}

int solveBracketsNumbers() {
    int result = 0;
    if (s[where] == '(') {
        where += 1; //skip (
        result = solveAdditionSubtraction();
        where += 1; //skip )
    } else {
        while ('0' <= s[where] and s[where] <= '9') {
            result = result * 10 + (s[where] - '0');
            where += 1;
        }
    }
    return result;
}

int main() {
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin.getline(s, 100002);
    fout << solveAdditionSubtraction();
    return 0;
}