Cod sursa(job #2815221)

Utilizator evelin1006Geoanca Iulian Evelin evelin1006 Data 9 decembrie 2021 12:13:45
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 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;
}