Esta questão não precisa ser aplicada apenas ao final de decimais - os decimais repetidos também podem ser convertidos em frações por meio de um algoritmo.
Sua tarefa é criar um programa que use um decimal repetido como entrada e faça a saída do numerador e denominador correspondente (em termos mais baixos) que produz essa expansão decimal. Frações maiores que 1 devem ser representadas como frações impróprias 9/5
. Você pode assumir que a entrada será positiva.
O decimal repetido será fornecido neste formato:
5.3.87
com tudo depois do segundo ponto repetido, assim:
5.3878787878787...
Seu programa produzirá dois números inteiros representando o numerador e o denominador, separados por uma barra (ou a forma equivalente no seu idioma, se você não produzir texto sem formatação):
889/165
Observe que os decimais finais não terão nada após o segundo ponto, e os decimais sem parte decimal não repetida não terão nada entre os dois pontos.
Casos de teste
Esses casos de teste cobrem todos os casos de canto necessários:
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
Se desejar, você também pode assumir que frações sem partes inteiras não têm nada à esquerda do primeiro ponto. Você pode testar isso com estes casos de teste opcionais:
.25. = 1/4
.1.6 = 1/6
..09 = 1/11
.. = 0/1
(in lowest terms)
isto é, a fração deve ser simplificada.
13
vez de 13/1
?
1.9999...
e de saída2/1
1.9999.
é 19999/10000
, para 2/1
você precisar 1..9
, não é?
9/99
?