Cod sursa(job #2737861)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 5 aprilie 2021 11:27:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

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

string s;

int eval3(int &pz);

int getNum(int &pz){
    int rez = 0;
    while(pz < (int)s.size() && isdigit(s[pz]))
        rez = rez * 10 + s[pz] - '0', ++pz;
    return rez;
}

int eval1(int &pz){
    int val;
    if(s[pz] == '('){
        ++pz;
        val = eval3(pz);
        ++pz;
    }
    else val = getNum(pz);
    return val;
}

int eval2(int &pz){
    int val = eval1(pz);
    while(pz < (int)s.size()){
        if(s[pz] == '*')
            ++pz, val *= eval1(pz);
        else if(s[pz] == '/')
            ++pz, val /= eval1(pz);
        else break;
    }
    return val;
}

int eval3(int &pz){
    int val = eval2(pz);
    while(pz < (int)s.size()){
        if(s[pz] == '+')
            ++pz, val += eval2(pz);
        else if(s[pz] == '-')
            ++pz, val -= eval2(pz);
        else break;
    }
    return val;
}

int main()
{
    fin >> s;

    int pz = 0;
    fout << eval3(pz) << '\n';
    return 0;
}