Cod sursa(job #3196159)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 22 ianuarie 2024 22:26:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
/*
 *  Ranking operatii:
 *  1. + sau -
 *  2. * sau /
 *  3. Constante
 */

int gIndex;
string ec;

long long op1();
long long op2();
long long op3();

long long numar() {
    long long ret = ec[gIndex] - '0';
    gIndex++;
    while (ec[gIndex] >= '0' && ec[gIndex] <= '9') {
        ret *= 10;
        ret += ec[gIndex] - '0';
        gIndex++;
    }
    return ret;
}

long long op1() {
    long long ret = op2();
    while (ec[gIndex] == '+' || ec[gIndex] == '-') {
        if (ec[gIndex] == '+') {
            gIndex++;
            ret += op2();
        } else {
            gIndex++;
            ret -= op2();
        }
    }
    return ret;
}

long long op2() {
    long long ret = op3();
    while (ec[gIndex] == '*' || ec[gIndex] == '/') {
        if (ec[gIndex] == '*') {
            gIndex++;
            ret *= op3();
        } else {
            gIndex++;
            ret /= op3();
        }
    }
    return ret;
}

long long op3() {
    long long ret;
    if (ec[gIndex] == '(') {
        gIndex++;
        ret = op1();
        gIndex++;
    } else {
        ret = numar();
    }
    return ret;
}

int main() {
    fin >> ec;
    fout << op1();
    return 0;
}