Cod sursa(job #3135569)

Utilizator sebuxSebastian sebux Data 3 iunie 2023 17:52:39
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
#define optim ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define ll long long
#define ull unsigned long long
#define ld long double
#define pb push_back
#define let auto
#define popcount __builtin_popcount
#define ctzll __builtin_ctzll
#define clzll __builtin_clzll

using namespace std;
string filename = "evaluare";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");

char s[100011];
char *p = s;
char operand[4][4] = {"+-", "*/", ""};

long operatie(long a, long b, char c)
{
    switch (c)
    {
    case '+':
        return a + b;
    case '-':
        return a - b;
    case '*':
        return a * b;
    case '/':
        return a / b;
    }
    return 0;
}
long eval(long);

long element()
{
    long r = 0;
    if (*p == '(')
    {
        ++p;
        r = eval(0);
        ++p;
    }
    else
    {
        while (strchr("0123456789", *p) && *p != '\0')
        {
            r = r * 10 + (*p - '0');
            ++p;
        }
    }
    return r;
}

long hmax = 2;
long eval(long h)
{
    long r;
    if (h == hmax)
        r = element();
    else
        r = eval(h + 1);

    while (strchr(operand[h], *p) && *p != '\0') {
        r = operatie(r,eval(h + 1),*(++p - 1));
    }
    return r;
}

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