Cod sursa(job #2775012)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 13 septembrie 2021 21:26:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>
#define ll long long
#define lsb(x) x & -x

using namespace std;

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

string s;
int position;

int sum();
int product();
int numberOrSum();
int getInteger();

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

    cin >> s;
    cout << sum();

    return 0;
}

int sum() {
    int answer = product();
    while(position < s.size() && (s[position] == '+' || s[position] == '-')) {
        position ++;
        if(s[position - 1] == '+')
            answer += product();
        else if(s[position - 1] == '-')
            answer -= product();
    }
    return answer;
}

int product() {
    int answer = numberOrSum();
    while(position < s.size() && (s[position] == '*' || s[position] == '/')) {
        position ++;
        if(s[position - 1] == '*')
            answer *= numberOrSum();
        else if(s[position - 1] == '/')
            answer /= numberOrSum();
    }
    return answer;
}

int numberOrSum() {
    int answer = 0;
    if(s[position] == '(') {
        position ++;
        answer = sum();
        position ++;
    } else {
        while(position < s.size() && '0' <= s[position] && s[position] <= '9') {
            answer *= 10;
            answer += (s[position] - '0');
            position ++;
        }
    }
    return answer;
}