Chúng ta có một số dấu phẩy động r
từ 0 đến 1 và một số nguyên p
.
Tìm phân số nguyên có mẫu số nhỏ nhất, gần đúng r
với ít nhất là p
độ chính xác kỹ thuật số.
- Đầu vào:
r
(một số dấu phẩy động) vàp
(số nguyên). - Đầu ra:
a
vàb
số nguyên, trong đóa/b
(như float) xấp xỉr
cho đến khip
chữ số.b
là số nguyên dương nhỏ nhất có thể có.
Ví dụ:
- nếu
r=0.14159265358979
vàp=9
, - sau đó kết quả là
a=4687
vàb=33102
, - vì
4687/33102=0.1415926530119026
.
Bất kỳ giải pháp nào cũng phải hoạt động trên lý thuyết với các loại độ chính xác tùy ý, nhưng các hạn chế gây ra bởi các loại độ chính xác cố định của việc triển khai không thành vấn đề.
Độ chính xác có nghĩa là số chữ số sau " 0.
" in r
. Vì vậy, nếu r=0.0123
và p=3
, sau đó a/b
nên bắt đầu với 0.012
. Nếu các p
chữ số đầu tiên của phần phân số r
là 0, hành vi không xác định được chấp nhận.
Đạt tiêu chí:
- Thuật toán nhanh nhất chiến thắng. Tốc độ được đo bằng O (p).
- Nếu có nhiều thuật toán nhanh nhất, thì chiến thắng ngắn nhất.
- Câu trả lời của riêng tôi được loại trừ khỏi tập hợp những người chiến thắng có thể.
Phần toán học thực sự dễ dàng hơn nhiều vì có vẻ như, tôi đề nghị đọc bài này .
padEnd
vàmatch
? Bạn có thể chỉslice
mỗi chuỗi với độ dài chính xác và sau đó trừ chúng?