Cod sursa(job #1404556)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 28 martie 2015 12:44:11
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <cctype>

const int MAX_SIZE(100001);

char s [MAX_SIZE];
int Index;

int Priority1 (void);
int Priority2 (void);
int Priority3 (void);

int Priority1 (void)
{
    int result(Priority2());
    while (s[Index] == '+' || s[Index] == '-')
        if (s[Index] == '+')
        {
            ++Index;
            result += Priority2();
        }
        else
        {
            ++Index;
            result -= Priority2();
        }
    return result;
}

int Priority2 (void)
{
    int result(Priority3());
    while (s[Index] == '*' || s[Index] == '/')
        if (s[Index] == '*')
        {
            ++Index;
            result *= Priority3();
        }
        else
        {
            ++Index;
            result /= Priority3();
        }
    return result;
}

int Priority3 (void)
{
    int result(0);
    if (s[Index] == '(')
    {
        ++Index;
        result = Priority1();
        ++Index;
    }
    else
        while (std::isdigit(s[Index]))
        {
            result *= 10;
            result += s[Index] - '0';
            ++Index;
        }
    return result;
}

int main (void)
{
    std::ifstream input("evaluare.in");
    input >> s;
    input.close();
    std::ofstream output("evaluare.out");
    output << Priority1() << '\n';
    output.close();
    return 0;
}