@Rand ≠ Rand
Data la natura dell'esercizio, che si suppone per principianti, è inutile tirar fuori codice assembler e operazioni sui bit;
è vero che non c'è mai un unico modo di fare le cose e che si trovano sempre metodi più efficienti di altri.
Ma chi ha aperto il topic sta cominciando adesso ad affacciarsi alla programmazione, è evidente che l'esercizio è stato dato per fargli far pratica di cicli (eventualmente annidati).
Il codice che hai postato funziona in C, è intraducibile un linguaggio che per valori booleani accetta false/true "puri" e non 0/diverso-da-zero in stile C/C++; inoltre l'algoritmo scritto così è incomprensibile.
Cosa peggiore di tutte, HAI BARATO perché hai violato le regole:
l'esercizio imponeva di NON usare la moltiplicazione, invece tu l'hai usata mascherata da funzione. Il metodo corretto è più banale con 2 for che mette in pratica il meccanismo di accumulazione delle somme (esplicitato pure da
@gronag).
Perciò... sei bocciato, imbroglione! :lol: :lol: :lol:
P.S.
ed inoltre, supponendo che la base b sia diversa da zero, nessuno ha considerato che b^0=1 !!!
perciò manca almeno un if su tutti i codici in tutti i linguaggi con cui avete codificato :P