Cod sursa(job #874685)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 9 februarie 2013 10:21:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>

using namespace std;

char S[100010];
char *Buffer = S;

int GetInt ()
{
    int X = 0;

    while (*Buffer >= '0' && *Buffer <= '9')
        X = (X * 10) + (*(Buffer ++) - '0');

    return X;
}

int termen ();
int factor ();

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

    while (*Buffer == '+' || *Buffer == '-'){
        if (*Buffer == '+'){
            ++ Buffer;
            r += termen ();
        }
        else{
            ++ Buffer;
            r -= termen ();
        }
    }

    return r;
}

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

    while (*Buffer == '*' || *Buffer == '/'){
        if (*Buffer == '*'){
            ++ Buffer;
            r *= factor ();
        }
        else{
            ++ Buffer;
            r /= factor ();
        }
    }

    return r;
}

int factor ()
{
    int r = 0;

    if (*Buffer == '('){
            ++ Buffer;
            r = eval ();
            ++ Buffer;
        }
    else
        r = GetInt ();

    return r;
}

int main()
{
    freopen ("evaluare.in", "r", stdin);
    freopen ("evaluare.out", "w", stdout);

    gets (S);
    printf ("%d", eval ());

    return 0;
}