Cod sursa(job #2790258)

Utilizator guzgandemunteIonescu Laura guzgandemunte Data 28 octombrie 2021 17:55:19
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <stack>
#define LMAX 100000

using namespace std;

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

char s[LMAX + 1];
int poz = 0;

int eval();
int termen();
int factor();

int main()
{
    fin >> s;
    fout << eval();

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

int eval()
{
    int result = termen();
    while (s[poz] == '+' || s[poz] == '-')
    {
        if (s[poz] == '+')
        {
            poz++;
            result += termen();
        }
        else
        {
            poz++;
            result -= termen();
        }
    }
    return result;
}

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

    while (s[poz] == '*' || s[poz] == '/')
    {
        if (s[poz] == '*')
        {
            poz++;
            result *= factor();
        }
        else
        {
            poz++;
            result /= factor();
        }
    }

    return result;
}

int factor()
{
    int result = 0;

    if (s[poz] == '(')
    {
        poz++;
        result = eval();
        poz++;
    }

    else
    {
        while (isdigit(s[poz]))
        {
            result = result * 10 + s[poz] - '0';
            poz++;
        }
    }

    return result;
}