Cod sursa(job #2964924)

Utilizator devilexeHosu George-Bogdan devilexe Data 14 ianuarie 2023 10:02:40
Problema Evaluarea unei expresii Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream cin ("evaluare.in");
ofstream cout("evaluare.out");

#define isdigit(x)  (x >='0' && x <= '9')
#define toint(x)    (x - '0')

char E[100010];
int Ej = 0, szE;

long inm_inp();
long termen();

long get()
{
    long n = 0;
    while(isdigit(E[Ej]) && Ej < szE)
    {
        n = n * 10 + toint(E[Ej]);
        Ej++;
    }
    return n;
}

long adun_scad()
{
    long n = inm_inp();
    while(E[Ej] == '+' || E[Ej] == '-')
    {
        if(E[Ej++] == '+') n += inm_inp();
        else n -= inm_inp();
    }
    return n;
}

long inm_inp()
{
    long n = termen();
    while(E[Ej] == '*' || E[Ej] == '/')
    {
        if(E[Ej++] == '*') n *= termen();
        else n /= termen();
    }
    return n;
}

long termen()
{
    if(E[Ej] != '(')
        return get();
    int rem;
    Ej++;
    rem = adun_scad();
    Ej++;
    return rem;
}

int main()
{
    cin.getline(E, 10010);
    szE = strlen(E);
    cout << adun_scad();
    return 0;
}