Wir haben eine Gleitkommazahl rzwischen 0 und 1 und eine ganze Zahl p.
Finden Sie den Anteil der ganzen Zahlen mit dem kleinsten Nenner, der sich rmit peiner Genauigkeit von mindestens einer Ziffer annähert.
- Eingaben:
r(eine Gleitkommazahl) undp(Ganzzahl). - Ausgaben:
aundbganze Zahlen, woa/b(als float) ungefährrbis zu denpZiffern.bist die mögliche kleinste solche positive ganze Zahl.
Beispielsweise:
- wenn
r=0.14159265358979undp=9, - dann ist das Ergebnis
a=4687undb=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.0123und p=3, dann a/bsollte mit beginnen 0.012. Wenn die ersten pZiffern des Bruchteils von r0 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 .
padEndund herummatch? Können Sie nicht einfachslicejede Zeichenfolge auf die richtige Länge bringen und sie dann subtrahieren?