Cod sursa(job #2701529)

Utilizator giotoPopescu Ioan gioto Data 31 ianuarie 2021 16:49:37
Problema Evaluarea unei expresii Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
using namespace std;

const int DIM = 1e5 + 5;

int calcul();
int getNumber();

int p = 0, n;
char s[DIM];
int calcul() {
    if (p > n) return 0;

    int val = getNumber();
    while (p <= n) {
        if (s[p] == '+' || s[p] == '-') {
            int sgn = 1;
            if (s[p] == '-') sgn = -1;
            ++p;

            val = val + sgn * calcul();
        } else if (s[p] == '*' || s[p] == '/') {
            if (s[p] == '*') ++p, val = val * getNumber();
            else if (s[p] == '/') ++p, val = val / getNumber();
        } else break ;
    }

    return val;
}

int parsare() {
    int x = 0;

    while (p <= n && s[p] >= '0' && s[p] <= '9') {
        x = x * 10 + (s[p] - '0');
        ++p;
    }

    return x;
}

int getNumber() {
    if (p > n) return 0;

    if (s[p] >= '0' && s[p] <= '9') return parsare();
    if (s[p] == '(') {
        ++p;
        int x = calcul();
        ++p;
        return x;
    }
}

int main() {
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);

    scanf("%s", s);
    n = strlen(s) - 1;
    int ans = calcul();
    printf("%d", ans);
    return 0;
}