Cod sursa(job #3041188)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 31 martie 2023 09:53:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define STOP pos < (int)s.size()

using namespace std;

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

string s;
int pos = 0;

int solve1(); /// +-
int solve2(); /// */
int solve3(); /// ()

int numar()
{
    int x = 0;
    while (STOP && isdigit(s[pos]))
        x = x * 10 + s[pos] - '0', pos++;
    return x;
}

int solve1()
{
    int res = solve2();
    while (STOP && (s[pos] == '+' || s[pos] == '-'))
    {
        pos++;
        if (s[pos-1] == '+')
            res += solve2();
        else
            res -= solve2();
    }
    return res;
}

int solve2()
{
    int res = solve3();
    while (STOP && (s[pos] == '*' || s[pos] == '/'))
    {
        pos++;
        if (s[pos-1] == '*')
            res *= solve3();
        else
            res /= solve3();
    }
    return res;
}

int solve3()
{
    int res;
    if (s[pos] == '(')
    {
        pos++;
        res = solve1();
        pos++;
    }
    else
        res = numar();
    return res;
}

int main()
{
    in >> s;
    out << solve1();
    return 0;
}