Cod sursa(job #2869873)

Utilizator servus2022Stefan Tonut servus2022 Data 11 martie 2022 21:32:07
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>

using namespace std;

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

const int NMAX = 1e5 + 1;

char S[NMAX], *p;

static inline int Eval ();
static inline int Termen ();
static inline int Factor ();

static inline int Eval ()
{
    int curr = Termen();

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

    return curr;
}

static inline int Termen ()
{
    int curr = Factor();

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

    return curr;
}

static inline int Factor ()
{
    if(*p == '(')
    {
        ++p;
        int ans = Eval();
        ++p;

        return ans;
    }

    int nr = 0, sign = 1;

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

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

    return (nr * sign);
}

static inline void Read ()
{
    f.tie(nullptr);

    f >> (S + 1), p = S + 1;

    return;
}

int main ()
{
    Read();

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

    return 0;
}