Cod sursa(job #1824715)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 8 decembrie 2016 12:30:51
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

char str[100010];
int n, ind = 1;

inline int sum ();

inline int elem ()
{
    if (str[ind] == '(')
    {
        ++ind;
        int rez = sum ();
        ++ind;
        return rez;
    }

    int rez = 0;
    for (; '0' <= str[ind] && str[ind] <= '9';)
        rez = rez * 10 + str[ind++] - 48;

    return rez;
}

inline int prod ()
{
    int rez = elem ();

    for (; str[ind] == '*' || str[ind] == '/';)
        if (str[ind] == '*')
            ++ind,
            rez *= elem ();

        else if (str[ind] == '/')
            ++ind,
            rez /= elem ();

    return rez;
}

inline int sum ()
{
    int rez = prod ();

    for (; str[ind] == '+' || str[ind] == '-';)
        if (str[ind] == '+')
            ++ind,
            rez += prod ();

        else if (str[ind] == '-')
            ++ind,
            rez -= prod ();

    return rez;
}

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

    gets (str + 1);
    n = strlen (str + 1);

    printf ("%d\n", sum ());

    return 0;
}