Cod sursa(job #2192762)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 7 aprilie 2018 10:52:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<iostream>
#include<string>
using namespace std;

long long term(const string &s, int &idx);
long long factor(const string &s, int &idx);

long long eval(const string &s, int &idx) {
    long long ans = term(s, idx);
    while (s[idx] == '+' || s[idx] == '-') {
        if (s[idx] == '+') { idx++; ans += term(s, idx); }
        if (s[idx] == '-') { idx++; ans -= term(s, idx); }
    }
    return ans;
}

long long term(const string &s, int &idx) {
    long long ans = factor(s, idx);
    while (s[idx] == '*' || s[idx] == '/') {
        if (s[idx] == '*') { idx++; ans *= factor(s, idx); }
        if (s[idx] == '/') { idx++; ans /= factor(s, idx); }
    }
    return ans;
}

long long factor(const string &s, int &idx) {
    long long ans = 0;
    if (s[idx] == '(') {
        idx++; ans = eval(s, idx); idx++;
    } else {
        while (idx < s.size() && '0' <= s[idx] && s[idx] <= '9') {
            ans = ans * 10 + s[idx] - '0';
            idx++;
        }
    }
    return ans;
}

int main () {
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);

    string s;
    int idx = 0;

    cin >> s;
    cout << eval(s, idx);
    return 0;
}