Cod sursa(job #792506)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 27 septembrie 2012 13:54:14
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstdio>

#define LG_MAX 100005

using namespace std;

int i;
char s[LG_MAX];

int PlusMinus();

int Paranteza()
{
    int rez = 0;

    if (s[i] >= '0' && s[i] <= '9')
        while (s[i] >= '0' && s[i] <= '9')
        {
            rez = rez * 10 + s[i] - '0';
            ++i;
        }
    else
        if (s[i] == '(')
        {
            ++i;
            rez = PlusMinus();
            ++i;
        }

    return rez;
}

int OriImpartit()
{
    int rez = Paranteza();

    if (s[i] == '*' || s[i] == '/')
    {
        ++i;

        if (s[i - 1] == '*')
            rez *= OriImpartit();
        else
            rez /= OriImpartit();
    }

    return rez;
}

int PlusMinus()
{
    int rez = OriImpartit();

    if (s[i] == '+' || s[i] == '-')
    {
        ++i;

        if (s[i - 1] == '+')
            rez += PlusMinus();
        else
            rez -= PlusMinus();
    }

    return rez;
}

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

    fgets (s, LG_MAX, stdin);
    i = 0;
    printf ("%d\n", PlusMinus());

    return 0;
}