Cod sursa(job #1107264)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 13 februarie 2014 19:24:20
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
# include <cstdio>

const int LMAX = 100000;

char s [LMAX];
char * p = s;

bool cifra (char c)
{
    if ('0' <= c)
        if (c <= '9')
            return true;

    return false;
}

void init ()
{
    freopen ("evaluare.in", "r", stdin);
    freopen ("evaluare.out", "w", stdout);
    gets (s);
}

int factor ();

int termen ()
{
    int nr = factor ();

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

        else if (* p == '/')
        {
            p ++;
            nr /= factor ();
        }

    p ++;

    return nr;
}

int eval ()
{
    int nr = termen ();

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

        else if (* p == '-')
        {
            p ++;
            nr -= termen ();
        }

    p ++;

    return nr;
}

int factor ()
{
    int nr = 0;

    if (* p == '(')
    {
        p ++;
        nr = eval ();
        p ++;
    }

    else
        while (cifra (* p))
        {
            nr = nr * 10 + * p - '0';
            p ++;
        }

    return nr;
}

int main ()
{
    init ();
    printf ("%d", eval ());

    return 0;
}