Abbiamo un numero in virgola mobile compreso rtra 0 e 1 e un numero intero p.
Trova la frazione di numeri interi con il minimo denominatore, che si avvicina rcon almeno una pprecisione di cifra.
- Ingressi:
r(un numero in virgola mobile) ep(numero intero). - Output:
aebnumeri interi, dovea/b(come float) si avvicinarallepcifre.bè il numero intero così piccolo possibile più piccolo possibile.
Per esempio:
- se
r=0.14159265358979ep=9, - allora il risultato è
a=4687eb=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.0123e p=3, quindi, a/bdovrebbe iniziare con 0.012. Se le prime pcifre della parte frazionaria di rsono 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.
padEndematch? Non puoi solosliceogni stringa della lunghezza corretta e poi sottrarli?