У нас есть число с плавающей запятой 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).
- Если есть несколько самых быстрых алгоритмов, то самый короткий выигрывает.
- Мой собственный ответ исключен из множества возможных победителей.
Ps математическая часть на самом деле намного проще, как кажется, я предлагаю прочитать этот пост.
padEnd
иmatch
? Разве вы не можете простоslice
каждую строку на правильную длину, а затем вычесть их?