Questa è una domanda di intervista che ho trovato: trovare K
prime cifre della rappresentazione decimale di 1/N
. Sembra che abbiamo bisogno solo di calcolare 10^K/N
per risolvere il problema. Ha senso ? Sembra che mi manchi qualcosa perché la soluzione è troppo facile.Come trovare le prime cifre K della rappresentazione decimale di 1/N
risposta
Basta implementare grado-scuola lungo divisione:
int value = 1;
bool outputDecimalSeparator = false;
int digitsOutput = 1;
while(digitsOutput <= k) {
if (value == 0) {
Console.Write(0);
}
else {
if (value < n) {
Console.Write(0);
value *= 10;
}
else {
Console.Write(value/n);
value %= n;
}
}
if (outputDecimalSeparator == false) {
outputDecimalSeparator = true;
Console.Write('.');
}
digitsOutput++;
}
Console.WriteLine();
il ramo su value == 0
è quello di rilevare quando 1/n
ha una rappresentazione di terminazione inferiore a k
cifre.
Qui, n
è il denominatore in 1/n
e k
è il numero di cifre da stampare nella rappresentazione decimale di 1/n
.
Si noti che modificando value *= 10
a value *= b
è possibile stampare anche la rappresentazione b-ary di 1/n
.
Se sono le prime k cifre, non è molto semplice moltiplicare il numeratore per 10^k e quindi diventa più facile dividere per N? E se abbiamo bisogno della risposta, la rappresentazione decimale che è, allora finiremo per dividere il risultato per 10^K di nuovo in modo che la moltiplicazione precedente nullifica.
Questa è la stessa domanda che l'OP sta chiedendo, questa non è una risposta .. – user470379
@ user470379, OP ha avuto un po 'di confusione nella sua domanda. Se ha solo bisogno delle prime cifre K, allora è molto semplice come lo facciamo per comodità. –
Calcolare 10^K/N può essere estremamente costoso con grandi K e N piccole.
Questo è probabilmente più vicino a una buona soluzione: long division. È il modo in cui dividevamo i numeri prima dei calcolatori. :)
Ovviamente, si dovrebbe eseguire questo algoritmo solo fino a quando non produce cifre K.
- 1. Swift: come confrontare le prime n cifre oltre la posizione decimale per CGFloat?
- 2. Java ottiene le prime 2 cifre decimali di un doppio
- 3. Matlab/Octave rappresentazione 1-of-K
- 4. rotonda decimale annullabile a 5 cifre decimali
- 5. Come arrotondare un decimale a 2 cifre decimali in .Net?
- 6. LISP - cifre dopo il punto decimale
- 7. Ottiene l'ultimo (ovvero endswith) 3 cifre di un decimale (.NET)
- 8. C# formattazione decimale della casella di testo
- 9. Approssimazione decimale a frazione irrazionale
- 10. Come calcolare le parole k principali
- 11. numero arrotondato alle prime 3 cifre (inizia con cifra! = 0)
- 12. Numero massimo di cifre dopo la virgola decimale utilizzando BigDecimal
- 13. cv :: Mat mat, COME Ridurre le cifre a destra del punto decimale in cv :: Mat?
- 14. Regex per le cifre in Unix trovare comando
- 15. Ottieni le prime righe di Wikipedia Articolo
- 16. Trovare i k-percorsi più brevi?
- 17. C'è un modo per ottenere le "cifre significative" di un decimale?
- 18. Stringa di formato: spazi tra le tre cifre
- 19. WebAPI, JSON.Net e perdita della precisione decimale
- 20. TTS salta in modo casuale le prime lettere della frase
- 21. sottolineatura tra le cifre
- 22. Decimale decimale per i punti specificati
- 23. decimale precisione di carri
- 24. Seleziona le prime tre immersioni
- 25. Da Doppio a Decimale senza arrotondamento dopo 15 cifre
- 26. Stampa float PHP con 3 cifre dopo il punto decimale?
- 27. Rappresentazione Ast della funzione lambda
- 28. Come estrarre cifre decimali di doppia/BigDecimal
- 29. Trova le prime corrispondenze x con re.findall
- 30. Rappresentazione visiva della logica di programma
Cosa succede se N è 3? – Pointy
che non funzionerebbe perché 1/8 == .125. Se k == 2 allora 10^2/8 = 12,5, che non aiuta. La risposta che vorresti è 25, giusto? forse sto vedendo questo sbagliato? –
Gli ultimi 3? o i primi 3? ... Spero tu sappia che ci sono alcuni numeri con la rappresentazione che hanno cifre infinite ... 1/3, 1/9 –