Cod sursa(job #2812392)

Utilizator SuyggyuDumitriu Florin Suyggyu Data 4 decembrie 2021 14:36:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

char s[100002];
int i;

int expresie();
int termen();
int factor();

int main()
{
    std::ifstream fin("evaluare.in");
    std::ofstream fout("evaluare.out");
    fin >> s;
    i = 0;
    fout << expresie();
}

int expresie()
{
    int r = termen();           // calculam primul termen
    while(s[i] == '+' || s[i] == '-')
    {
        if(s[i] == '+')
        {
            i++;                // sarim peste +
            r += termen();
        }
        else
        {
            i++;                // sarim peste -
            r -= termen();
        }
    }
    return r;
}

int termen()
{
    int r = factor();

    while(s[i] == '*' || s[i] == '/')
    {
        if(s[i] == '*')
        {
            i++;                // sarim peste *
            r *= factor();
        } else
        {
            i++;                // sarim peste /
            r /= factor();
        }
    }

    return r;
}

int factor()
{
    int r;
    if(s[i] == '(')             // expresie
    {
        i++;
        r = expresie();
        i++;
    } else                      // numar
    {
        r = 0;
        while(s[i] >= '0' && s[i] <= '9')
        {
            r = r*10 + (s[i] - '0');
            i++;
        }
    }
    return r;
}