Cod sursa(job #2734014)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 31 martie 2021 11:38:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

#ifndef LOCAL

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

#define cin in
#define cout out

#endif //LOCAL

int suma();
int prod();
int term();

string s;
int sIndex = 0;

int suma()
{
    int ret = prod();
    char op = s[sIndex];

    while(op == '+' || op == '-')
    {
        sIndex++;
        if(op == '+') ret += prod();
        else ret -= prod();
        op = s[sIndex];
    }

    return ret;
}

int prod()
{
    int ret = term();
    char op = s[sIndex];

    while(op == '*' || op == '/')
    {
        sIndex++;
        if(op == '*') ret *= term();
        else ret /= term();
        op = s[sIndex];
    }

    return ret;
}

int term()
{
    if(s[sIndex] == '(')
    {
        sIndex++;

        int ret = suma();

        #ifdef LOCAL
            assert(s[sIndex] == ')');
        #endif

        sIndex++;

        return ret;
    }
    else
    {
        int nr = 0;
        while(s[sIndex] >= '0' && s[sIndex] <= '9')
        {
            nr = nr * 10 + s[sIndex] - '0';
            sIndex++;
        }

        return nr;
    }
}

int main()
{
    cin >> s;
    s = '(' + s + ')';

    cout << term();
}