Cod sursa(job #2870725)

Utilizator stefandutastefandutahoria stefanduta Data 12 martie 2022 15:23:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#define NMAX 100005

using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");

char s[NMAX];
int i;

bool isdigit(char x)
{
    return x >= '0' && x <= '9';
}

int adunare();
int inmultire();
int factor();

int factor()
{
    int nr;
    if (isdigit(s[i]))
    {
        nr = 0;
        while (isdigit(s[i]))
        {
            nr = nr * 10 + s[i] - '0';
            ++i;
        }
    }
    else if (s[i] == '(')
    {
        ++i;
        nr = adunare();
        ++i;
    }
    return nr;
}

int inmultire()
{
    int nr = factor();
    while (s[i] == '*' || s[i] == '/')
    {
        if (s[i] == '*')
        {
            ++i;
            nr = nr * factor();
        }
        else if (s[i] == '/')
        {
            ++i;
            nr = nr / factor();
        }
    }
    return nr;
}

int adunare()
{
    int nr = inmultire();
    while (s[i] == '+' || s[i] == '-')
    {
        if (s[i] == '+')
        {
            ++i;
            nr = nr + inmultire();
        }
        else if (s[i] == '-')
        {
            ++i;
            nr = nr - inmultire();
        }
    }
    return nr;
}

int main()
{
    i = 0;
    in.getline(s, NMAX);
    out << adunare();
    return 0;
}