Cod sursa(job #2709621)

Utilizator AlexandruGabrielAliciuc Alexandru AlexandruGabriel Data 20 februarie 2021 17:55:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N = 100005;
char sir[N], *p = sir;

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

int eval()
{
    int val = termen();
    while (*p == '+' || *p == '-')
    {
        if (*p == '+')
        {
            p++;
            val += termen();
        }
        else
        {
            p++;
            val -= termen();
        }
    }
    return val;
}

int termen()
{
    int val = factor();
    while (*p == '*' || *p == '/')
    {
        if (*p == '*')
        {
            p++;
            val *= factor();
        }
        else
        {
            p++;
            val /= factor();
        }
    }
    return val;
}

int factor()
{
    int val;
    if (*p == '(')
    {
        p++;
        val = eval();
        p++;
    }
    else
    {
        val = 0;
        while (isdigit(*p))
        {
            val = val * 10 + (*p - '0');
            p++;
        }
    }
    return val;
}

int main()
{
    fin >> sir;
    fout << eval();
    return 0;
}