Cod sursa(job #2091893)

Utilizator inquisitorAnders inquisitor Data 20 decembrie 2017 15:26:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <cstdio>

int Evaluate(), Term(), Factor();

char expression[1 << 17], *i = expression;

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

    scanf("%s", expression);

    printf("%d", Evaluate());

    return 0;
}

int Evaluate()
{
    int result = Term();

    while (true)
    {
        switch (*i)
        {
            case '+':
                i++;
                result += Term();
                break;

            case '-':
                i++;
                result -= Term();
                break;

            default :
                return result;
        }
    }
}

int Term()
{
    int result = Factor();

    while (true)
    {
        switch (*i)
        {
            case '*':
                i++;
                result *= Factor();
                break;

            case '/':
                i++;
                result /= Factor();
                break;

            default:
                return result;
        }
    }
}

int Factor()
{
    int result = 0;

    if (*i == '(')
    {
        i++;
        result = Evaluate();
        i++;
    }
    else
    {
        while (*i >= '0' && *i <= '9')
        {
            result = result * 10 + *i - '0';
            i++;
        }
    }

    return result;
}