Cod sursa(job #2714901)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 2 martie 2021 18:03:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <string>

using namespace std;

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

int PlusMinus(int &pos);
int MultiplyDivide(int &pos);
int BracketsValues(int &pos);

string s;

int PlusMinus(int &pos) {
    int ans = MultiplyDivide(pos);

    while((s[pos] == '+' || s[pos] == '-') && pos < (int)s.size()) {
        pos++;
        if(s[pos - 1] == '+')
            ans += MultiplyDivide(pos);
        else
            ans -= MultiplyDivide(pos);
    }

    return ans;
}

int MultiplyDivide(int &pos) {
    int ans = BracketsValues(pos);

    while((s[pos] == '*' || s[pos] == '/') && pos < (int)s.size()) {
        pos++;
        if(s[pos - 1] == '*')
            ans *= BracketsValues(pos);
        else
            ans /= BracketsValues(pos);
    }

    return ans;
}

int BracketsValues(int &pos) {
    int ans = 0;

    if(s[pos] == '(') {
        pos++;
        ans = PlusMinus(pos);
        pos++;
    } else {
        while(pos < (int)s.size() && '0' <= s[pos] && s[pos] <= '9') {
            ans = ans * 10 + (s[pos] - '0');
            pos++;
        }
    }

    return ans;
}

int main() {
    cin >> s;

    int pos = 0;
    cout << PlusMinus(pos);

    return 0;
}