Cod sursa(job #2709184)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 19 februarie 2021 21:37:36
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 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 r = Termen();

    while(*p == '+' || *p == '-')
    {
        if(*p == '+')
        {
            ++p;

            r += Termen();
        }
        else
        {
            ++p;

            r -= Termen();
        }
    }

    return r;
}

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

    while(*p == '*' || *p == '/')
    {
        if(*p == '*')
        {
            ++p;

            r *= Factor();
        }
        else
        {
            ++p;

            r /= Factor();
        }
    }

    return r;
}

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

        int r = Eval();

        ++p;

        return r;
    }

    int ans = 0;
    int sign = 1;

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

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

    return (ans * sign);
}

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

    f >> (S + 1);

    return;
}

static inline void Solve ()
{
    p = (S + 1);

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

    return;
}

int main()
{
    Read();

    Solve();

    return 0;
}