Что вам нужно сделать, это создать функцию / программу, которая принимает десятичное число в качестве входных данных и выводит результат многократного взятия обратной дробной части числа, пока число не станет целым числом.
Более конкретно, процесс выглядит следующим образом:
Пусть х будет входным
Если x является целым числом, выведите его.
В противном случае: . Вернитесь к 2.
является дробной компонентой и равен . \ left \ lfloor x \ right \ rfloor - это пол x, который является наибольшим целым числом меньше x .
Тестовые случаи:
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
Сводка для 0 к 1 с шагом 0,1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
Это код-гольф , поэтому побеждает меньше байтов.
Разъяснения:
- «Бонусные баллы» за отсутствие ошибок округления
- Должен работать для любого неотрицательного рационального числа (игнорируя ошибку округления)
- Вы можете, но не обязаны выводить предпринятые шаги
- Вы можете принять ввод в виде десятичного числа, дроби или пары чисел, которые могут быть в строке.
Извините за все вопросы, это мой первый вопрос на этом сайте.