Cod sursa(job #2927951)

Utilizator AlexTimplaruAlexandru Timplaru AlexTimplaru Data 21 octombrie 2022 21:32:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
// https://www.infoarena.ro/problema/evaluare
#include <fstream>

using namespace std;

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

char e[100001];
int p = 0;

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

int expresie()
{
    int v = termen();

    while(e[p] == '+' || e[p] == '-')
    {
        if(e[p] == '+')
        {
            p++;
            v = v + termen();
        }
        else
        {
            p++;
            v = v - termen();
        }
    }
    return v;
}

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

    while(e[p] == '*' || e[p] == '/')
    {
        if(e[p] == '*')
        {
            p++;
            v = v * factor();
        }
        else
        {
            p++;
            v = v / factor();
        }
    }
    return v;
}

int factor()
{
    int v;
    if(e[p] == '(')
    {
        p++;
        v = expresie();
        p++;
    }
    else
    {
        v = numar();
    }
    return v;
}

int numar()
{
    int v = 0;
    while(e[p] >= '0' && e[p] <= '9')
    {
        v = v*10 + (int)(e[p] - '0');
        p++;
    }
    return v;
}

int main()
{
    fin >> e;
    fout << expresie();
}