Cod sursa(job #3187608)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 29 decembrie 2023 17:52:21
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int i;
string str;
long long expresie();
long long termen();
long long factor();
long long constanta();


long long expresie(){
    long long res = termen();
    while(str[i] == '-' || str[i] == '+') {
        if(str[i] == '+') {
            i++;
            res += termen();
        }
        if(str[i] == '-') {
            i++;
            res -= termen();
        }
    }
    return res;
}
long long termen() {
    long long res = factor();
    while(str[i] == '*' || str[i] == '/'){
        if(str[i] == '*'){
            i++;
            res *= factor();
        }
        if(str[i] == '/'){
            i++;
            res /= factor();
        }
    }
    return res;
}
long long factor(){
    long long res;
    if(str[i] == '('){
        i++;
        res = expresie();
        i++;
    }
    else{
        res = constanta();
    }
    return res;
}

long long constanta(){
    long long res = 0;
    while(str[i] >= '0' && str[i] <= '9'){
        res*=10;
        res+= str[i] - '0';
        i++;
    }
    return res;
}

int main() {
    fin>>str;
    long long ans = expresie();
    fout<<ans;
    return 0;
}