Abbiamo un numero in virgola mobile compreso r
tra 0 e 1 e un numero intero p
.
Trova la frazione di numeri interi con il minimo denominatore, che si avvicina r
con almeno una p
precisione di cifra.
- Ingressi:
r
(un numero in virgola mobile) ep
(numero intero). - Output:
a
eb
numeri interi, dovea/b
(come float) si avvicinar
allep
cifre.b
è il numero intero così piccolo possibile più piccolo possibile.
Per esempio:
- se
r=0.14159265358979
ep=9
, - allora il risultato è
a=4687
eb=33102
, - perché
4687/33102=0.1415926530119026
.
Qualsiasi soluzione deve funzionare in teoria con tipi di precisione arbitraria, ma i limiti causati dai tipi di precisione fissa delle implementazioni non contano.
Precisione indica il numero di cifre dopo " 0.
" in r
. Pertanto, se r=0.0123
e p=3
, quindi, a/b
dovrebbe iniziare con 0.012
. Se le prime p
cifre della parte frazionaria di r
sono 0, il comportamento indefinito è accettabile.
Criteri di vincita:
- Vince l'algoritmo algoritmicamente più veloce. La velocità è misurata in O (p).
- Se ci sono più algoritmi più veloci, vince il più breve.
- La mia risposta è esclusa dall'insieme dei possibili vincitori.
Ps la parte matematica è in realtà molto più semplice come sembra, suggerisco di leggere questo post.
padEnd
ematch
? Non puoi soloslice
ogni stringa della lunghezza corretta e poi sottrarli?