Nous avons un nombre à virgule flottante r
entre 0 et 1 et un entier p
.
Trouvez la fraction d'entiers avec le plus petit dénominateur, qui se rapproche r
avec une p
précision d' au moins chiffres.
- Entrées:
r
(un nombre à virgule flottante) etp
(entier). - Sorties:
a
etb
entiers, oùa/b
(flottant) se rapprocher
jusqu'auxp
chiffres.b
est le plus petit entier positif possible.
Par exemple:
- si
r=0.14159265358979
etp=9
, - alors le résultat est
a=4687
etb=33102
, - parce que
4687/33102=0.1415926530119026
.
Toute solution doit fonctionner en théorie avec des types à précision arbitraire, mais les limitations causées par les types à précision fixe des implémentations n'ont pas d'importance.
La précision signifie le nombre de chiffres après " 0.
" dans r
. Ainsi, si r=0.0123
et p=3
, alors a/b
devrait commencer par 0.012
. Si les premiers p
chiffres de la partie fractionnaire de r
sont 0, un comportement non défini est acceptable.
Critères de victoire:
- L'algorithme algorithmiquement le plus rapide gagne. La vitesse est mesurée en O (p).
- S'il existe plusieurs algorithmes les plus rapides, le plus court l'emporte.
- Ma propre réponse est exclue de l'ensemble des gagnants possibles.
Ps la partie mathématique est en fait beaucoup plus facile qu'il n'y paraît, je vous suggère de lire ce post.
padEnd
etmatch
? Vous ne pouvez pas simplementslice
chaque chaîne à la bonne longueur, puis les soustraire?