Что вам нужно сделать, это создать функцию / программу, которая принимает десятичное число в качестве входных данных и выводит результат многократного взятия обратной дробной части числа, пока число не станет целым числом.
Более конкретно, процесс выглядит следующим образом:
Пусть х будет входным
Если 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
Это код-гольф , поэтому побеждает меньше байтов.
Разъяснения:
- «Бонусные баллы» за отсутствие ошибок округления
- Должен работать для любого неотрицательного рационального числа (игнорируя ошибку округления)
- Вы можете, но не обязаны выводить предпринятые шаги
- Вы можете принять ввод в виде десятичного числа, дроби или пары чисел, которые могут быть в строке.
Извините за все вопросы, это мой первый вопрос на этом сайте.
code-golf
math
arithmetic
recursion
rational-numbers
Соломон Уцко
источник
источник
Ответы:
J, 18 байт
В J идиома
u ^: v ^:_
означает «Продолжайте применять глагол,u
пока условиеv
возвращает истину.В нашем случае условие завершения определяется ловушкой
~:<.
, что означает «пол числа<.
не равен~:
самому числу» - поэтому мы остановимся, когда основной глаголu
вернет int.u
в этом случае другой хук-<.
- число минус его пол - возвращаемое значение подается в@
ответный глагол%
.Попробуйте онлайн!
источник
_2{(%@-<.) ::]^:a:
.%@|~&1^:(~:<.)^:_
Python 3 , 101 байт
Попробуйте онлайн!
Формат: строка должна содержать десятичную точку.
источник
.replace(".","")
->.replace(*"._")
сохранить 1 байтMathematica, 36 байт
демонстрация
источник
Rationalize
?Rationalize
Mathematica считает, что нет достаточной точности для генерации всех членов непрерывной дроби. Например,ContinuedFraction[0.1]
это просто{0}
.Perl 6 , 42 байта
Попробуйте онлайн!
nude
Метод возвращает ню merator и де числителя рационального числа в виде списка из двух элементов. Короче получить знаменатель таким образом, чемdenominator
напрямую вызывать метод.источник
Haskell , 47 байтов
Это лучше, чем ответ Wheat Wizard, потому что
GHC.Real
позволяет нам использовать шаблон для рационального использования:%
, а также иметь более короткое имя.Попробуйте онлайн!
f
принимаетRational
число в качестве входных данных, хотя ghc позволяет записывать их в десятичном формате с определенной точностью.источник
Haskell ,
4034 байтаРедактировать:
(Не удержался от публикации этого после просмотра ответов на Haskell с подробным импортом - теперь я вижу, что некоторые другие языковые ответы также по существу используют этот метод.)
!
принимает два целочисленных аргумента (числитель и знаменатель дроби; они не обязательно должны быть в наименьших терминах, но знаменатель должен быть положительным) и возвращает целое число. Звоните как314!100
.Попробуйте онлайн!
n/d
(при условииd
положительного) являетсяmod n d/d
, таким образом , еслиmod n d==0
,!
рекурсивно с представлениемd/mod n d
.источник
Python 3 + sympy , 67 байт
Попробуйте онлайн!
Sympy - это символический математический пакет для Python. Поскольку он является символическим, а не двоичным, нет ошибок с плавающей запятой.
источник
PHP , 69 байт
Попробуйте онлайн!
PHP , 146 байт
Попробуйте онлайн!
источник
Желе , 8 байт
Попробуйте онлайн!
Неточности с плавающей точкой.
источник
M
для фиксации с плавающей точкой неточностей: P . Это желе, но с произвольной точностью математики. Не исправляет цикл 0,7.JavaScript ES6, 25 байт
Позвоните
f(a,b)
дляa/b
источник
gcd(a,b)=1
можно удалить/b
Haskell ,
6261 байтПопробуйте онлайн!
Использует
Data.Ratio
библиотеку Хаскелла для рациональных рациональных рациональностей. Если бы только встроенные имена были не такими длинными.источник
Data.Ratio
. Я никогда не слышал оGHC.Real
. Не стесняйтесь размещать это как свой собственный ответ.APL (Dyalog Classic) , 18 байт
Попробуйте онлайн!
APL NARS, 18 символов
-1 байт благодаря тесту Уриэля
источник
⍵-⌊⍵
→1|⍵
за один байтSmalltalk, 33 байта
источник
Stax , 8 байт
Запустите и отладьте его
«Бонусные баллы» для точности ошибок. Арифметика с плавающей запятой не используется. Это (наконец) использует встроенный рациональный тип Stax.
источник
JavaScript, 70 байт
Если мы можем изменить тип ввода на строку, то он может сохранить 5 байтов.
источник