У нас є число з плаваючою комою r
між 0 і 1 і цілим числом p
.
Знайдіть частку цілих чисел з найменшим знаменником, яка наближається r
з принаймні p
-значною точністю.
- Введення:
r
(число з плаваючою комою) таp
(ціле число). - Виходи:
a
іb
цілі числа, деa/b
(як float) наближаєтьсяr
доp
цифр.b
- можливе найменше таке додатне ціле число.
Наприклад:
- якщо
r=0.14159265358979
іp=9
, - то результат
a=4687
іb=33102
, - тому що
4687/33102=0.1415926530119026
.
Будь-яке рішення має теоретично працювати з типами довільної точності, але обмеження, спричинені типами фіксованої точності впровадження, не мають значення.
Точність означає кількість цифр після " 0.
" в r
. Таким чином, якщо r=0.0123
і p=3
, тоді a/b
слід почати з 0.012
. Якщо перші p
цифри дробової частини r
дорівнюють 0, невизначена поведінка є прийнятною.
Критерії виграшу:
- Алгоритмічно найшвидший алгоритм виграє. Швидкість вимірюється в O (p).
- Якщо існує кілька найшвидших алгоритмів, виграє найкоротший.
- Моя власна відповідь виключається із набору можливих переможців.
Якщо математична частина насправді набагато простіша, як здається, пропоную прочитати цю публікацію.
padEnd
іmatch
? Ви не можете простоslice
виконати кожну рядок потрібної довжини, а потім відняти їх?