Esta pregunta no necesita aplicarse solo a decimales de terminación: los decimales repetidos también se pueden convertir en fracciones a través de un algoritmo.
Su tarea es hacer un programa que tome un decimal repetido como entrada, y generar el numerador y denominador correspondiente (en los términos más bajos) que produce esa expansión decimal. Las fracciones mayores que 1 deben representarse como fracciones impropias como 9/5
. Puede suponer que la entrada será positiva.
El decimal repetido se dará en este formato:
5.3.87
con todo después del segundo punto repetido, así:
5.3878787878787...
Su programa generará dos enteros que representan el numerador y el denominador, separados por una barra diagonal (o la forma equivalente en su idioma si no genera texto sin formato):
889/165
Tenga en cuenta que los decimales finales no tendrán nada después del segundo punto, y los decimales sin una porción decimal no repetida no tendrán nada entre los dos puntos.
Casos de prueba
Estos casos de prueba cubren todos los casos de esquina requeridos:
0..3 = 1/3
0.0.3 = 1/30
0.00.3 = 1/300
0.6875. = 11/16
1.8. = 9/5
2.. = 2/1
5..09 = 56/11
0.1.6 = 1/6
2..142857 = 15/7
0.01041.6 = 1/96
0.2.283950617 = 37/162
0.000000.1 = 1/9000000
0..9 = 1/1
0.0.9 = 1/10
0.24.9 = 1/4
Si lo desea, también puede suponer que las fracciones sin partes enteras no tienen nada a la izquierda del primer punto. Puede probar eso con estos casos de prueba opcionales:
.25. = 1/4
.1.6 = 1/6
..09 = 1/11
.. = 0/1
(in lowest terms)
es decir, la fracción debe ser simplificada.
13
lugar de 13/1
?
1.9999...
y salida2/1
1.9999.
es 19999/10000
, para satisfacer 2/1
tus necesidades 1..9
, ¿no?
9/99
?