Esiste un algoritmo per contare le cifre di un numero decimale oltre a salvarlo come stringa e quindi eseguire il ciclo per trovare il punto decimale e quindi contare le cifre?
So cosa stai pensando. Stai pensando che se fosse possibile enumerare in qualche modo le cifre dopo il punto decimale, potresti contarle. Ma che tu usi una stringa o qualsiasi altro meccanismo, c'è un problema fondamentale:
how do you know when to stop counting?
Convertire il numero in una stringa può sembrare una soluzione semplice, ma è solo perché qualcun altro ha già preso questa decisione fondamentale per te, e la loro scelta ha una probabilità piuttosto sottile di essere la scelta giusta per te. Se chiedi una rappresentazione in stringa di π
(felice π
giorno, a proposito!) Otterrai ovviamente una stringa di lunghezza finita, che potrebbe tentarti credere che π
abbia un numero finito di cifre.
Non.
Quindi, quello che stai cercando di fare non funzionerà, perché ci sono molti numeri che non possono essere rappresentati in modo accurato usando o float o double, quindi tali numeri sembrano contenere cifre decimali senza senso che finiscono lì dove la precisione del float o doppie estremità. Per favore, prova questo a casa: printf( "%.30f\n", 2.9f );
il risultato sarà qualcosa di divertente, come 2.900000095367431640625000000000
o 2.899999999999999911182158029987
, o simile a seconda della macchina e del compilatore.
E, naturalmente, questo si manifesterà facilmente nei calcoli: se dividi 29
per 10
non otterrai realmente 2.9
, ma un'approssimazione di esso.
Quindi, qualunque cosa tu pensi che stai per realizzare contando le cifre decimali di un numero non funzionerà. Hai qualche altro tipo di problema da risolvere e pensi che il conteggio delle cifre decimali lo risolva e sei venuto qui per chiederci come implementare la tua soluzione immaginaria. Questo è un tipico esempio di chiedere una risposta invece di fare una domanda. Non c'è nulla di cui vergognarsi, molte persone commettono questo errore nello scambio di stack, ma il mio punto qui è che è meglio trovare un modo per risolvere il problema originale che non prevede il conteggio delle cifre decimali di un numero.
Hai opzioni:
Oppure puoi provare:
oppure puoi provare:
che è più veloce? che è più facile da capire?
Provane uno, crea casi di test, cronometralo; quindi passare a quello successivo.
Ricerca perché assumere il valore assoluto è importante.
Leggi altre domande sui tag algorithms