Cod sursa(job #2969628)

Utilizator laurentiu.maticaMatica Laurentiu-Andrei laurentiu.matica Data 23 ianuarie 2023 14:46:48
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <string>
using namespace std;
string expresie;
int semn(char a, char b, int st, int dr)
{
    int cnt = 0;
    for (int i = dr; i >= st; i--)
        if (expresie[i] == ')')
            cnt++;
        else if (expresie[i] == '(')
            cnt--;
        else if ((expresie[i] == a || expresie[i] == b) && cnt == 0)
            return i;
    return -1;
}
int numar(int st, int dr)
{
    int p = 1;
    int num = 0;
    for (int i = dr; i >= st; i--)
        num += (expresie[i] - '0') * p, p *= 10;
    return num;
}
int eval(int st, int dr)
{
    int poz = semn('+', '-', st, dr);
    if (poz != -1)
    {
        int e1 = eval(st, poz - 1);
        int e2 = eval(poz + 1, dr);
        if (expresie[poz] == '+')
            return e1 + e2;
        else
            return e1 - e2;
    }
    poz = semn('*', '/', st, dr);
    if (poz != -1)
    {
        int e1 = eval(st, poz - 1);
        int e2 = eval(poz + 1, dr);
        if (expresie[poz] == '*')
            return e1 * e2;
        else
            return e1 / e2;
    }
    if (expresie[st] == '(' && expresie[dr] == ')')
        return eval(st + 1, dr - 1);
    return numar(st, dr);
}
int main()
{
    getline(cin, expresie);
    cout << eval(0, expresie.size() - 1);
    return 0;
}