Lo que debe hacer es crear una función / programa que tome un decimal como entrada y genere el resultado de tomar repetidamente el recíproco de la parte fraccionaria del número, hasta que el número se convierta en un entero.
Más específicamente, el proceso es el siguiente:
Deje x ser la entrada
Si x es un entero, envíelo.
De lo contrario: . Regrese a 2.
x x - ⌊ x ⌋ ⌊ x ⌋ x es el componente fraccionario de , y es igual a . es el piso de x, que es el mayor entero menor que .
Casos de prueba:
0 = 0
0.1 = 1/10 -> 10
0.2 = 1/5 -> 5
0.3 = 3/10 -> 10/3 -> 1/3 -> 3
0.4 = 2/5 -> 5/2 -> 1/2 -> 2
0.5 = 1/2 -> 2
0.6 = 3/5 -> 5/3 -> 2/3 -> 3/2 -> 1/2 -> 2
0.7 = 7/10 -> 10/7 -> 3/7 -> 7/3 -> 1/3 -> 3
0.8 = 4/5 -> 5/4 -> 1/4 -> 4
0.9 = 9/10 -> 10/9 -> 1/9 -> 9
1 = 1
3.14 = 157/50 -> 7/50 -> 50/7 -> 1/7 -> 7
6.28 = 157/25 -> 7/25 -> 25/7 -> 4/7 -> 7/4 -> 3/4 -> 4/3 -> 1/3 -> 3
Resumen de 0 a 1 en incrementos de 0.1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
Este es el código de golf , por lo que gana menos bytes.
Aclaraciones:
- "Puntos de bonificación" sin error de redondeo
- Debería funcionar para cualquier número racional no negativo (ignorando el error de redondeo)
- Puede, pero no tiene que dar salida a los pasos dados
- Puede tomar la entrada como un decimal, fracción o par de números, que pueden estar en una cadena.
Perdón por todos los problemas, esta es mi primera pregunta en este sitio web.