Cod sursa(job #2791446)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 30 octombrie 2021 15:20:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

string s;

/// X   ->   cif   |   X*10 + cif
int X(int &p){
    int answer=0;

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

    return answer;
}

int E(int &p);

/// F   ->   X   |   ( E )
int F(int &p){
    int answer;

    if(s[p] == '('){
        p++; /// scap de '('
        answer = E(p);
        p++; /// scap de ')'
    }else
        answer = X(p);

    return answer;
}

/// T   ->   F   |   F */ X
int T(int &p){
    int answer=F(p);

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

        if(s[p] == '*')
            p++, answer *= F(p);
        else
            p++, answer /= F(p);

    return answer;
}

/// E   ->   T   |   E +- T
int E(int &p){
    int answer = T(p);

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

        if(s[p] == '+')
            p++, answer += T(p);
        else
            p++, answer -= T(p);

    return answer;
}


int main (){
    fin>>s; int p=0;
    fout<<E(p);
    return 0;
}