Tenemos un número de coma flotante r
entre 0 y 1, y un número entero p
.
Encuentre la fracción de enteros con el mínimo denominador, que se aproxima r
con al menos p
precisión de dígitos.
- Entradas:
r
(un número de coma flotante) yp
(entero). - Salidas:
a
yb
enteros, dondea/b
(como flotante) se aproximar
hasta losp
dígitos.b
es el menor entero positivo posible más pequeño.
Por ejemplo:
- si
r=0.14159265358979
yp=9
, - entonces el resultado es
a=4687
yb=33102
, - debido
4687/33102=0.1415926530119026
.
Cualquier solución tiene que funcionar en teoría con tipos de precisión arbitraria, pero las limitaciones causadas por los tipos de precisión fija de las implementaciones no importan.
Precisión significa el número de dígitos después de " 0.
" en r
. Por lo tanto, si r=0.0123
y p=3
, entonces a/b
debería comenzar con 0.012
. Si los primeros p
dígitos de la parte fraccional de r
son 0, el comportamiento indefinido es aceptable.
Criterio de victoria:
- El algoritmo algorítmicamente más rápido gana. La velocidad se mide en O (p).
- Si hay varios algoritmos más rápidos, entonces gana el más corto.
- Mi propia respuesta está excluida del conjunto de posibles ganadores.
PD: la parte de matemáticas es en realidad mucho más fácil de lo que parece, sugiero leer esta publicación.
padEnd
ymatch
? ¿No puede simplementeslice
cada cadena a la longitud correcta y luego restarlas?