Cod sursa(job #3140312)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 5 iulie 2023 14:57:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

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

static constexpr int NMAX = (int)(1e5 + 1);

static inline int eval();
static inline int term();
static inline int factor();

char S[NMAX], *p;

static inline int eval()
{
    int ans = term();
    while (*p == '+' || *p == '-')
    {
        if (*p == '+')
            ++p, ans += term();
        else
            ++p, ans -= term();
    }
    return ans;
}

static inline int term()
{
    int ans = factor();
    while (*p == '*' || *p == '/')
    {
        if (*p == '*')
            ++p, ans *= factor();
        else
            ++p, ans /= factor();
    }
    return ans;
}

static inline int factor()
{
    if (*p == '(')
    {
        ++p;
        int ans = eval();
        ++p;

        return ans;
    }

    int ans = 0, sign = +1;

    if (*p == '-')
        sign = -1, ++p;

    while (*p >= '0' && *p <= '9')
        ans = ans * 10 + (int)(*p - '0'), ++p;

    return (ans * sign);
}

int main()
{
    f.tie(nullptr);

    f >> S, p = S;

    g << eval() << '\n';

    return 0;
}