Cod sursa(job #2875067)

Utilizator Theodor17Pirnog Theodor Ioan Theodor17 Data 20 martie 2022 19:40:09
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;

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

string s;
int p;

long long eval();
long long termen();
long long factor();

long long eval(){

    long long ans = termen(); // luam valoarea primului termen

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

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

            p++; // trecem de '+'
            ans += termen();

        }else{

            p++; // trecem de '-'
            ans -= termen();

        }

    }

    return ans;
}

long long termen(){

    long long ans = factor(); // luam valoarea primului factor

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

        if(s[p] == '*'){

            p++; // trecem de '*'
            ans *= factor();

        }else{

            p++;
            ans /= factor();

        }

    }

    return ans;
}

long long factor(){

    long long x = 0;

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

        p++; // trecem de '('
        x = eval(); // evaluam subexpresia
        p++; // trecem de ')'

        return x;
    }

    while(s[p] >= '0' && s[p] <= '9')
        x = x * 10 + (s[p] - 48), p++;

    return x;
}

int main(){

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

    return 0;
}