¿Hay un algoritmo para averiguar las siguientes cosas?Algoritmo para detectar decimales repetidos?
- Si el resultado de una división es un decimal que se repite (en binario).
- Si se repite, ¿a qué dígito (representado como potencia de 2) comienza la repetición?
- ¿Qué dígitos se repiten?
Algunos ejemplos:
1/2 = 1/10 = 0.1 // 1 = false, 2 = N/A, 3 = N/A, 4 = N/A
1/3 = 1/11 = 0.010101... // 1 = true, 2 = -2, 3 = 10
2/3 = 10/11 = 0.101010... // 1 = true, 2 = -1, 3 = 10
4/3 = 100/11 = 1.010101... // 1 = true, 2 = 0, 3 = 10
1/5 = 1/101 = 0.001100110011... // 1 = true, 2 = -3, 3 = 1100
¿Hay una manera de hacer esto? La eficiencia es una gran preocupación. Una descripción del algoritmo sería preferible al código, pero tomaré la respuesta que pueda obtener.
También vale la pena señalar que la base no es un gran problema; Puedo convertir el algoritmo en binario (o si está en, por ejemplo, base 256 para usar char
s por facilidad, podría usarlo). Digo esto porque si estás explicando podría ser más fácil para ti explicar en la base 10 :).
¿Qué otras condiciones ha usado para obtener el resultado? ¿Por qué los dígitos que se repiten "01", "01", "10" y "0011" no se repiten? – Guffa
@Guffa Mi razonamiento fue poner 1 en primer lugar porque los ceros a la izquierda no son [significativos] [1], mientras que los ceros al final son. Si el número fuera algo así como "111.010101 ...", los números que se repiten serían "01" porque en ese caso el primer 0 * es * significativo. [1]: http: //en.wikipedia.org/wiki/Significant_digits – Imagist
@Guffa (continuación) Aunque eso no es importante para mí. Si me dijeras cómo hacer esto de manera que devolviera "01", "01", "01" y "0011", estaría contento. :) – Imagist