Cod sursa(job #3309194)

Utilizator Andrei-Dani-10Pisla Andrei Daniel Andrei-Dani-10 Data 2 septembrie 2025 13:06:33
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <cassert>

using namespace std;

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

const int nmax = 1e5;
string str;
int n, pos = 1;

/**
E = T + T + ...
T = F * F * ...
F = number or E
**/

int solve(int &pos);
int termen(int &pos);
int factor(int &pos);

int solve(int &pos){
    int value = termen(pos);

    for(; pos <= n && (str[pos] == '+' || str[pos] == '-'); ){
        int sgn = ((str[pos] == '+') ? 1 : -1);

        value += (sgn * termen(++pos));
    }

    return value;
}

int termen(int &pos){
    int value = factor(pos);

    for(; pos <= n && (str[pos] == '*' || str[pos] == '/'); ){

        if(str[pos] == '*'){
            value *= factor(++pos);
        }else{ value /= factor(++pos); }

    }

    return value;
}

int factor(int &pos){
    int value = 0;
    if(str[pos] == '('){
        pos++; value = solve(pos); pos++;
    }else{
        for(; pos <= n && '0' <= str[pos] && str[pos] <= '9'; pos++)
            value = 10 * value + str[pos] - '0';
    }
    return value;
}

int main(){

    in>>str; n = str.size();
    str = '#' + str + '#';

    out<<solve(pos)<<"\n";

    return 0;
}