Cod sursa(job #2713761)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 28 februarie 2021 16:03:50
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 f ("evaluare.in");
ofstream g ("evaluare.out");

constexpr int NMAX = 1e5 + 10;

char ch[NMAX+5];
char *p;

int Eval ();
int Factor ();
int Termen ();

int Eval () {
    int r = Termen();

    while (*p == '+' || *p == '-') {
        if (*p == '+') {
            p ++;
            r = r + Termen();
        }
        else {
            p ++;
            r = r - Termen();
        }
    }

    return r;
}

int Termen () {
    int r = Factor();

    while (*p == '*' || *p == '/') {
        if (*p == '*') {
            p ++;
            r = r * Factor();
        }
        else {
            p++;
            r = r / Factor();
        }
    }

    return r;
}

int Factor () {
    int r = 0;

    if (*p == '(') {
        p ++;
        r = Eval();
        p ++;
    }
    else {
        while (isdigit(*p)) {
            r = r * 10 + (*p - '0');
            ++ p;
        }
    }

    return r;
}

int main()
{
    f.get(ch, NMAX);

    p = ch;

    g << Eval() << " ";

    return 0;
}