Cod sursa(job #792497)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 27 septembrie 2012 13:47:40
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 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] == '/')
    {
        char c = s[i];
        ++i;
        int aux = OriImpartit();

        if (c == '*')
            rez *= aux;
        if (c == '/')
            rez /= aux;
    }

    return rez;
}

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

    if (s[i] == '+' || s[i] == '-')
    {
        char c = s[i];
        ++i;
        int aux = PlusMinus();

        if (c == '+')
            rez += aux;
        if (c == '-')
            rez -= aux;
    }

    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;
}