Aiuto per zeri di coda

Ho provato a risolvere il problema con vari tentativi tra i quali:

  • Tentare di precalcolare gli zeri del risultato (output non corretti)

  • Tentare di ‘snellire’ il numero in modo da farlo rientrare in un int64 (od opportunamente in un __int128) (output non corretti, molto probabilmente a causa del facile overflow)

  • Creare una struttura dati (nel mio caso un deque) in grado di contenere tutte le cifre del risultato, con conseguente implementazione di funzioni per moltiplicare e gestire i resti (va fuori tempo, ma suppongo che almeno gli output siano corretti e che magari la soluzione sia questa ed il problema sia solo di ottimizzazione)

Mi sono confrontato anche con la mia squadra, ma la situazione è bloccata.
Qualche aiuto? :sweat_smile:

Piccolo edit: attualmente sono riuscito a risolverlo, ma ho l’impressione di aver usato una soluzione un po’ greedy (togliendo gli zeri alla fine e alcune cifre all’inizio), consigli per migliorare la soluzione sono comunque bene accetti :slight_smile:

Come hai intuito, memorizzare l’intero risultato è infattibile.
Una prima osservazione potrebbe essere capire quando un numero decimale termina con 0. (Sugg: Si può considerare la fattorizzazione del numero).

Ricordo quando feci uno stage per i giochi matematici, mi chiesero:
“Calcola con quanti 0 finisce 2015!”
Ovviamente, non avevo la più pallida idea di come fare!
Questo problema secondo me è molto simile a il calcolo degli 0 finali di n!.
Prova a pensare: come si forma uno 0 in fondo?
Aggiungere uno ‘0’ in fondo ad un numero è come moltiplicare per…?
Parti da questo, usa la scomposizione e poi non è niente di impossibile!
Buona fortuna :slight_smile:

Scusate l’o.t. ma…
Con quanti 0 finiva 2015? :stuck_out_tongue:

Bella domanda :joy::joy:
Ho scritto ‘2015!’, e cioè: 2015 * 2014 * 2013…* 2 * 1 :yum:

1 Mi Piace

Dovrebbero essere 502

2 Mi Piace

Confermo 502 :smile:. Pensa a quanti 5 ci sono in 2015!

1 Mi Piace