Cod sursa(job #2787981)

Utilizator mateitudordmDumitru Matei mateitudordm Data 24 octombrie 2021 15:52:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

string s;
int ind = 0;
long long calc(), inm(), fact();
long long fact()
{
    long long res = 0;
    if (s[ind] == '(')
        ++ind, res = calc();
    else
        while (s[ind] >= '0' && s[ind] <= '9')
            res = res * 10 + (s[ind] - '0'), ind++;
    //cout << "res " << res << endl;
    return res;
}
long long inm()
{
    long long p = fact();
    while (s[ind] == '*' || s[ind] == '/')
    {
        if (s[ind] == '*')
            ++ind, p *= fact();
        else
            ++ind, p /= fact();
    }
    return p;
}
long long calc()
{
    long long sum = inm();
    //cout << "sum " << sum << " " << ind << endl;
    while (s[ind] == '+' || s[ind] == '-')
    {
        if (s[ind] == '+')
            ++ind, sum += inm();
        else
            ++ind, sum -= inm();
    }
    if (s[ind] == ')')
        ind++;
    return sum;
}

int main()
{
    ifstream cin("evaluare.in");
    ofstream cout("evaluare.out");
    cin >> s;
    cout << calc();
}