Cod sursa(job #3140424)

Utilizator MAlex2019Melintioi George Alexandru MAlex2019 Data 6 iulie 2023 11:00:52
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <cctype>

using namespace std;

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

string ex;
int poz = 0;

int getnr();
int divmul();
int plusminus();

int main() {
    getline(fin, ex);
    fout << plusminus();
    return 0;
}

int getnr() {
    int x = 0;
    if (ex[poz] == '(') {
        poz++;
        x = plusminus();
        poz++;
    }
    else
        while (isdigit(ex[poz]))
            x = x*10 + ex[poz++] - '0';
    //cout << "getnr: " << x << '\n';
    return x;
}

int divmul() {
    int x = getnr();
    char curr;
    while ((curr = ex[poz]) == '*' || curr == '/') {
        poz++;
        int y = getnr();
        if (curr == '*')
            x *= y;
        else
            x /= y;
    }
    //cout << "divmul: " << x << '\n';
    return x;
}

int plusminus() {
    int x = divmul();
    char curr;
    while ((curr = ex[poz]) == '+' || curr == '-') {
        poz++;
        int y = divmul();
        if (curr == '+')
            x += y;
        else
            x -= y;
    }
    //cout << "plusminus: " << x << '\n';
    return x;
}