Mamy liczbę zmiennoprzecinkową z zakresu rod 0 do 1 oraz liczbę całkowitą p.
Znajdź ułamek liczb całkowitych o najmniejszym mianowniku, który aproksymuje rz przynajmniej pcyfrową precyzją.
- Dane wejściowe:
r(liczba zmiennoprzecinkowa) ip(liczba całkowita). - Wyjścia:
aibliczby całkowite, gdziea/b(jako liczba zmiennoprzecinkowa) jest przybliżanardopcyfr.bjest możliwą najmniejszą taką dodatnią liczbą całkowitą.
Na przykład:
- jeśli
r=0.14159265358979ap=9, - Następnie wynik jest
a=4687ib=33102, - dlatego
4687/33102=0.1415926530119026.
Każde rozwiązanie musi działać teoretycznie z typami o dowolnej precyzji, ale ograniczenia wynikające z typów o stałej precyzji implementacji nie mają znaczenia.
Precyzja oznacza liczbę cyfr po „ 0.” w r. Tak więc, jeśli r=0.0123i p=3, to a/bnależy zacząć od 0.012. Jeśli pierwsze pcyfry części ułamkowej rsą równe 0, nieokreślone zachowanie jest dopuszczalne.
Kryteria wygranej:
- Algorytm najszybszy algorytm wygrywa. Prędkość jest mierzona w O (p).
- Jeśli istnieje wiele najszybszych algorytmów, wygrywa najkrótszy.
- Moja własna odpowiedź jest wykluczona z listy możliwych zwycięzców.
Ps część matematyczna jest w rzeczywistości o wiele łatwiejsza, jak się wydaje, proponuję przeczytać ten post.
padEndimatch? Czy nie możesz po prostuslicekażdego łańcucha do odpowiedniej długości, a następnie odjąć je?