Kami memiliki angka floating point r
antara 0 dan 1, dan bilangan bulat p
.
Temukan fraksi bilangan bulat dengan penyebut terkecil, yang mendekati r
dengan setidaknya p
-digit presisi.
- Input:
r
(angka floating point) danp
(integer). - Output:
a
danb
bilangan bulat, di manaa/b
(as float) mendekatir
hinggap
digit.b
adalah bilangan bulat positif terkecil yang mungkin.
Sebagai contoh:
- jika
r=0.14159265358979
danp=9
, - maka hasilnya adalah
a=4687
danb=33102
, - karena
4687/33102=0.1415926530119026
.
Setiap solusi harus bekerja secara teori dengan tipe presisi arbitrer, tetapi batasan yang disebabkan oleh tipe presisi tetap implementasi tidak menjadi masalah.
Presisi berarti jumlah digit setelah " 0.
" dalam r
. Jadi, jika r=0.0123
dan p=3
, maka a/b
harus dimulai dengan 0.012
. Jika p
digit pertama dari bagian fraksional r
adalah 0, perilaku tidak terdefinisi dapat diterima.
Kriteria menang:
- Algoritme tercepat secara algoritmik menang. Kecepatan diukur dalam O (p).
- Jika ada beberapa algoritma tercepat, maka yang paling pendek menang.
- Jawaban saya sendiri dikecualikan dari himpunan pemenang yang mungkin.
Ps bagian matematika sebenarnya jauh lebih mudah seperti yang terlihat, saya sarankan untuk membaca posting ini .
padEnd
danmatch
? Tidak bisakah Anda hanyaslice
setiap string dengan panjang yang benar dan kemudian kurangi?