# Aiuto per Simple Calculator (ois\_calculator)

**URL:** <https://forum.olinfo.it/t/aiuto-per-simple-calculator-ois-calculator/10095>\
**Category:** Aiuto\
**Created:** [12 Novembre 2026, 3:42pm UTC](https://forum.olinfo.it/t/aiuto-per-simple-calculator-ois-calculator/10095 "2026-11-12T15:42:36Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![matita08](https://forum.olinfo.it/user_avatar/forum.olinfo.it/matita08/32/3258_2.png) [@matita08](https://forum.olinfo.it/u/matita08)\
**Post date:** [12 Novembre 2026, 3:42pm UTC](https://forum.olinfo.it/t/aiuto-per-simple-calculator-ois-calculator/10095/1 "2026-11-12T15:42:36Z")

</div>

Ciao a tutti, ho bisogno di aiuto per risolvere il problema [Simple Calculator](https://training.olinfo.it/task/ois_calculator).

sto ricevendo nei task 16-24-35-37 `Checker error`. cosa significa?

Grazie mille in anticipo!

---

<div class="post-metadata">

**Author:** ![matita08](https://forum.olinfo.it/user_avatar/forum.olinfo.it/matita08/32/3258_2.png) [@matita08](https://forum.olinfo.it/u/matita08)\
**Post date:** [12 Novembre 2026, 3:45pm UTC](https://forum.olinfo.it/t/aiuto-per-simple-calculator-ois-calculator/10095/2 "2026-11-12T15:45:25Z")

</div>

ecco il codice della mia sottoposizione:

```auto
#include <bits/stdc++.h>

using namespace std;

struct Dt { int a,b; char op; };

void hp(unordered_map<int, Dt>& mem, set<int>& dp, int n, Dt op) {
if(mem.find(n) != mem.end()) return;
mem[n] = op;
dp.insert(n);
}

string pr(int N, unordered_map<int, Dt>& c) {
//cout<<"dba "<<N<<endl;
if (N == 1) return "1";
Dt cu = c[N];
string op(1, cu.op);
if (cu.op == '<') op = "<<";
if (cu.op == '>') op = ">>";
//cout<<"db: "<<cu.a<<" "<<cu.op<<"\_"<<op<<" "<<cu.b<<endl;
return "(" + pr(cu.a, c) + op + pr(cu.b, c) + ")";
}

int main() {
int M;
cin >> M;

unordered_map<int, Dt> mem;
vector<set<int>> dp(1);
dp[0].insert(1);

int i = 1;
while(mem.find(M) == mem.end()) {
set<int> cur;

for(int n = 0; n < i; n++) {
    for(auto it = dp[n].begin(); it != dp[n].end(); it++) {
        int ne = i - n - 1;
        for(auto ite = dp[ne].begin(); ite != dp[ne].end(); ite++) {
            int v1 = (*it);
            int v2 = (*ite);
            //cout<<"DB: "<<v1<<" "<<v2<<endl;
            hp(mem, cur, v1 + v2, {v1, v2, '+'});
            hp(mem, cur, v1 - v2, {v1, v2, '-'});
            hp(mem, cur, v1 * v2, {v1, v2, '*'});
            if (v2 > 0) hp(mem, cur, v1 / v2, {v1, v2, '/'});
            if (v2 > 0) hp(mem, cur, v1 % v2, {v1, v2, '%'});
            hp(mem, cur, v1 << v2, {v1, v2, '<'});
            hp(mem, cur, v1 >> v2, {v1, v2, '>'});
            hp(mem, cur, v1 ^ v2, {v1, v2, '^'});
            hp(mem, cur, v1 | v2, {v1, v2, '|'});
            hp(mem, cur, v1 & v2, {v1, v2, '&'});
            }
        }
    }

    dp.push_back(cur);i++;
}

//cout<<"l: "<<i<<endl;
cout << pr(M, mem) << endl;

return 0;
}

```

---

<div class="post-metadata">

**Author:** ![fve5](https://forum.olinfo.it/user_avatar/forum.olinfo.it/fve5/32/3229_2.png) [@fve5](https://forum.olinfo.it/u/fve5)\
**Post date:** [13 Novembre 2026, 7:47pm UTC](https://forum.olinfo.it/t/aiuto-per-simple-calculator-ois-calculator/10095/3 "2026-11-13T19:47:42Z")

</div>

Ciao, intanto mi sono permesso di togliere un paio di caratteri extra dal tuo codice che lo rendevano non valido.  
Il motivo è semplicemente che il checker è buggato: ogni qual volta una sottoespressione abbia come risultato un numero negativo interpreta il segno meno come operatore e si rompe.

Adesso penso a come aggiustare. Grazie per la segnalazione.
