Cod sursa(job #2855545)

Utilizator LionMan101Achim-Panescu Silvian LionMan101 Data 22 februarie 2022 16:22:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

#define LMAX 2 // nivelul maxim de prioritate


#define NX 100010

using namespace std;

vector<string> op={"+-","*/","^",""};

string S;
string::iterator p;

int eval( int a, int b, char o ) {
    switch( o ) {
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return a / b;
    }
    return 0;
}

int expr( int lev ) {
    int x, y;
    if( lev == LMAX ){
        if( *p == '(' ){
            ++p;
            x = expr(0);
            ++p;
        }
        else{
            for( x = 0; *p >= '0' && *p <= '9'; ++p ){
                x = x * 10 + *p - '0';
            }
        }
    }
    else{
        for(x = expr(lev+1); op[lev][0]==*p || op[lev][1]==*p; x = y ){
            y = eval( x, expr(lev+1), *p++ );
        }
    }
    return x;
}


int main() {
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);

    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    cin>>S;
    p=S.begin();
    cout<<expr(0);
    return 0;
}