Cod sursa(job #2975973)

Utilizator raulababeiAbabei Raul raulababei Data 7 februarie 2023 22:16:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

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

char s[100001];

int caut(int st, int dr, char e1, char e2){
    int nr = 0;
    for(int i = dr;i >= st;i--){
        if(s[i] == '(') nr++;
        if(s[i] == ')') nr--;
        if(nr == 0 && (s[i] == e1 || s[i] == e2)) return i;
    }
    return -1;
}

int number(int st, int dr){
    int nr = 0;
    for(int i = st;i <= dr; i++){
        nr = nr * 10 + (s[i] - '0');
    }
    return nr;
}

int solve(int st, int dr){
    int poz = caut(st, dr, '+', '-');
    if(poz != -1){
        int exp1 = solve(st, poz - 1);
        int exp2 = solve(poz + 1, dr);
        if(s[poz] == '+') return exp1 + exp2;
        else return exp1 - exp2;
    }
    poz = caut(st, dr, '*', '/');
    if(poz != -1){
        int exp1 = solve(st, poz - 1);
        int exp2 = solve(poz + 1, dr);
        if(s[poz] == '*') return exp1 * exp2;
        else return exp1 / exp2;
    }
    if(s[st] == '(' && s[dr] == ')') return solve(st + 1, dr - 1);
    return number(st, dr);
}

int main() {
    in.getline(s, 100001);
    int n = strlen(s);
    out << solve(0, n - 1);
    return 0;
}