O que você precisa fazer é criar uma função / programa que use um decimal como entrada e produz o resultado de pegar repetidamente o inverso da parte fracionária do número, até que o número se torne um número inteiro.
Mais especificamente, o processo é o seguinte:
Seja x a entrada
Se x é um número inteiro, produza-o.
Caso contrário: . Volte para 2.
é o componente fracionário de e é igual a . é o piso de x, que é o maior número inteiro menor que .
Casos de teste:
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
Resumo de 0 a 1 em incrementos de 0,1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
Isso é código-golfe , e o menor número de bytes vence.
Esclarecimentos:
- "Pontos de bônus" para nenhum erro de arredondamento
- Deve funcionar para qualquer número racional não negativo (ignorando o erro de arredondamento)
- Você pode, mas não precisa executar as etapas executadas
- Você pode considerar a entrada como decimal, fração ou par de números, que pode estar em uma sequência.
Desculpe por todos os problemas, esta é a minha primeira pergunta neste site.