Esta es una pregunta de la entrevista que encontré: encuentre K
primeros dígitos de la representación decimal de 1/N
. Parece que solo necesitamos calcular 10^K/N
para resolver el problema. Tiene sentido ? Parece que me falta algo porque la solución es demasiado fácil.Cómo encontrar los primeros dígitos de K de la representación decimal de 1/N
Respuesta
Sólo implementar el algoritmo de división de escuela primaria:
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();
La rama de value == 0
es detectar cuando 1/n
tiene una representación de terminación de menos de k
dígitos.
Aquí, n
es el denominador en 1/n
y k
es el número de dígitos para imprimir en la representación decimal de 1/n
.
Tenga en cuenta que cambiando value *= 10
a value *= b
puede imprimir la representación b-aria de 1/n
también.
Si son los primeros k dígitos, ¿no es muy sencillo multiplicar el numerador por 10^k y entonces es más fácil dividir por N? Y si necesitamos la respuesta, es decir, la representación decimal, entonces terminaremos dividiendo el resultado por 10^K nuevamente para que la multiplicación previa anule.
Esta es la misma pregunta que OP está haciendo, esta no es una respuesta ... – user470379
@ user470379, OP tenía un poco de confusión en su pregunta. Si solo necesita los primeros K dígitos, entonces es muy directo ya que lo hacemos por conveniencia. –
Calcular 10^K/N puede ser extremadamente costoso con K's grandes y N's pequeñas.
Esto es probablemente más cercano a una buena solución: long division. Es como solíamos dividir los números antes que las calculadoras. :)
Obviamente, solo debe ejecutar este algoritmo hasta que arroje K dígitos.
- 1. primeros y últimos k dígitos del número n^n
- 2. Representación binaria de .NET Decimal
- 3. Número de dígitos para N ** K
- 4. Cómo calcular los dígitos recurrentes?
- 5. ¿Cómo puedo insertar un punto decimal antes de los últimos tres dígitos de un número?
- 6. Representación Matlab/Octave 1-of-K
- 7. LISP - dígitos después del punto decimal
- 8. Significado de dígitos después NaN en Python decimal objeto
- 9. (K & R) ¿Al menos los primeros 31 caracteres de un nombre interno son significativos?
- 10. ¿Hay alguna forma de agregar un número par de dígitos?
- 11. ¿Cómo redondear el número decimal a 2 dígitos en iphone?
- 12. Encontrar el siguiente número único más alto de los dígitos dados
- 13. ¿Cómo obtener los primeros n elementos de Hash en ruby?
- 14. Aproximación de fracción decimal a fracción irracional
- 15. ¿Cómo puedo separar un número y obtener los dos primeros dígitos en PHP?
- 16. ¿Cómo extraer dígitos fraccionarios de doble/BigDecimal
- 17. Suma de los mayores divisores impares de los primeros n números
- 18. Generando secuencia de cadenas binarias con k donde la siguiente cadena difiere en dos dígitos
- 19. precisión decimal de flotadores
- 20. expresión regular para los dígitos en Unix encontrar comando
- 21. jQuery: ¿cómo encontrar los primeros botones de entrada/selección/textarea visibles excluyendo?
- 22. MYSQL: DECIMAL con una precisión de 10 dígitos después de la coma
- 23. ¿Encontrar las secuencias k-más largas en una matriz unidimensional?
- 24. ¿Dónde encontrar un software/herramienta de código abierto K-medoid (no k-means) confiable?
- 25. La determinación de la mejor k de k vecino más cercano
- 26. pérdida de dígitos cuando los flotadores en división C++ (Arduino)
- 27. ¿Cómo usar el filtro de flotador para mostrar solo dos dígitos después del punto decimal?
- 28. ¿Cómo ordenar los dígitos en un número?
- 29. ¿Cómo calcular el valor del dígito i-ésimo en una representación k-aria de un número?
- 30. Cómo modificar std :: stod (cadena a doble) para separador decimal y número de dígitos
¿Qué pasa si N es 3? – Pointy
que no funcionaría porque 1/8 == .125. Si k == 2 entonces 10^2/8 = 12.5, lo cual no ayuda. La respuesta que querrías es 25, ¿verdad? tal vez estoy viendo esto mal? –
¿Los últimos 3? o primeros 3? ... Espero que sepas que hay algunos números con la representación que tienen dígitos infinitos ... 1/3, 1/9 –