Cod sursa(job #3146068)

Utilizator AlexPlesescuAlexPlesescu AlexPlesescu Data 18 august 2023 14:35:37
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#define ll long long
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
ll i;
string s;
ll expresie();
ll termen();
ll factor();
ll constanta();

ll expresie() {
    ll r = termen();
    while(s[i] == '+' || s[i] == '-') {
        if(s[i] == '+')
            i++ , r += termen();
        else
            i++ , r -= termen();
    }
    return r;
}

ll termen() {
    ll r = factor();
    while(s[i] == '*' || s[i] == '/') {
        if(s[i] == '*')
            i++ , r *= factor();
        else
            i++ , r /= factor();
    }
    return r;
}

ll factor() {
    ll r = 0;
    if(s[i] == '(') {
        i++;
        r = expresie();
        i++;
    }
    else {
        r = constanta();
    }
    return r;
}

ll constanta() {
    ll r = 0;
    while(s[i] >= '0' && s[i] <= '9') {
        r = r * 10 + s[i]-'0';
        i++;
    }
    return r;
}
int main()
{
    cin >> s;
    cout << expresie();
    return 0;
}