Cod sursa(job #1413798)

Utilizator Ionut228Ionut Calofir Ionut228 Data 2 aprilie 2015 09:10:45
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

char sir[100005];
int i;

long long plusminus();
long long inmultireimpartire();
long long nrparanteze();

long long plusminus()
{
    long long nr = inmultireimpartire();
    while (sir[i] == '+' || sir[i] == '-')
    {
        if (sir[i] == '+')
        {
            ++i;
            nr += inmultireimpartire();
        }
        else if (sir[i] == '-')
        {
            ++i;
            nr -= inmultireimpartire();
        }
    }

    return nr;
}

long long inmultireimpartire()
{
    long long nr = nrparanteze();
    while (sir[i] == '*' || sir[i] == '/')
    {
        if (sir[i] == '*')
        {
            ++i;
            nr *= nrparanteze();
        }
        else if (sir[i] == '/')
        {
            ++i;
            nr /= nrparanteze();
        }
    }

    return nr;
}

long long nrparanteze()
{
    long long nr = 0;
    if (sir[i] == '(')
    {
        ++i;
        nr = plusminus();
        ++i;
    }
    while (sir[i] >= '0' && sir[i] <= '9')
    {
        nr = nr * 10 + int(sir[i] - '0');
        ++i;
    }

    return nr;
}

int main()
{
    fin.getline(sir + 1, 100005);
    i = 1;

    fout << plusminus() << '\n';

    fin.close();
    fout.close();
    return 0;
}