Wir haben eine Gleitkommazahl r
zwischen 0 und 1 und eine ganze Zahl p
.
Finden Sie den Anteil der ganzen Zahlen mit dem kleinsten Nenner, der sich r
mit p
einer Genauigkeit von mindestens einer Ziffer annähert.
- Eingaben:
r
(eine Gleitkommazahl) undp
(Ganzzahl). - Ausgaben:
a
undb
ganze Zahlen, woa/b
(als float) ungefährr
bis zu denp
Ziffern.b
ist die mögliche kleinste solche positive ganze Zahl.
Beispielsweise:
- wenn
r=0.14159265358979
undp=9
, - dann ist das Ergebnis
a=4687
undb=33102
, - weil
4687/33102=0.1415926530119026
.
Jede Lösung muss theoretisch mit Typen mit beliebiger Genauigkeit funktionieren, aber Einschränkungen, die durch Typen mit fester Genauigkeit der Implementierungen verursacht werden, spielen keine Rolle.
Präzision bedeutet die Anzahl der Stellen nach " 0.
" in r
. Also, wenn r=0.0123
und p=3
, dann a/b
sollte mit beginnen 0.012
. Wenn die ersten p
Ziffern des Bruchteils von r
0 sind, ist undefiniertes Verhalten akzeptabel.
Gewinnkriterien:
- Der algorithmisch schnellste Algorithmus gewinnt. Die Geschwindigkeit wird in O (p) gemessen.
- Wenn es mehrere schnellste Algorithmen gibt, gewinnt der kürzeste.
- Meine eigene Antwort ist aus dem Satz der möglichen Gewinner ausgeschlossen.
Ps der mathematische Teil ist eigentlich viel einfacher, wie es scheint, ich schlage vor, diesen Beitrag zu lesen .
padEnd
und herummatch
? Können Sie nicht einfachslice
jede Zeichenfolge auf die richtige Länge bringen und sie dann subtrahieren?