Cod sursa(job #2861828)

Utilizator Theodor17Pirnog Theodor Ioan Theodor17 Data 4 martie 2022 15:41:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cstring>

using namespace std;

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

const int NMAX = 1e5;
char expresie[NMAX + 5];
int p;

int factor();
int termen();
int eval();

int eval(){

    int ans = factor();

    while(expresie[p] == '+' || expresie[p] == '-'){

        if(expresie[p] == '+'){

            p++;
            ans += factor();

        }else{

            p++;
            ans -= factor();

        }

    } 

    return ans;

}

int factor(){

    int ans = termen();

    while(expresie[p] == '*' || expresie[p] == '/'){

        if(expresie[p] == '*'){
            
            p++;
            ans *= termen();

        }else{
            
            p++;
            ans /= termen();

        }

    }

    return ans;
}

int termen(){

    int semn = 1, x = 0;

    while(expresie[p] == '-')
        semn = -semn, p++;

    if(expresie[p] == '('){

        p++;
        x = eval();
        p++;

        return x * semn;
    }

    while(isdigit(expresie[p])){

        x = x * 10 + (expresie[p] - 48);
        p++;

    }

    return x * semn;
}

int main(){

    cin.getline(expresie, NMAX + 1);
    cout << eval();

}