Trong biểu diễn thập phân của mỗi số hữu tỷ p/q
, bạn có đuôi định kỳ, đầu không định kỳ và phần trước dấu thập phân theo định dạng sau:
(before decimal point).(non-periodic)(periodic)
Một số ví dụ bao gồm:
1/70 = 0.0142857... = (0).(0)(142857)
10/7 = 1.428571... = (1).()(428571) ## no non-periodic part
1/13 = 0.076923... = (0).()(076923)
3/40 = 0.075 = (0).(075)() ## no periodic part
-2/15 = -0.13... = -(0).(1)(3) ## negative
75/38 = 1.9736842105263157894... = (1).(9)(736842105263157894)
## periodic part longer than float can handle
25/168 = 0.148809523... = (0).(148)(809523)
120/99 = 40/33 = 1.212121... = (1).()(21)
2/1 = 2 = (2).()() ## no periodic, no non-periodic
0/1 = 0 = (0).()()
0/2 = 0 = (0).()()
299/792 = 0.37752... = (0).(377)(52)
95/-14 = -6.7857142... = -(6).(7)(857142)
-95/-14 = 6.7857142... = (6).(7)(857142)
Thách thức là hoán đổi các phần định kỳ và không định kỳ, để lại before decimal point
một mình, để tạo ra một số mới. Ví dụ:
25/168 = 0.148809523... = (0).(148)(809523)
=> (0).(809523)(148) = 0.809523148148... = 870397/1080000
Nếu một số không có phần định kỳ như 0.25
biến số đó thành số định kỳ mới và ngược lại.
1/4 = 0.25 = (0).(25)() => (0).()(25) = 0.252525... = 25/99
4/9 = 0.444444... = (0).()(4) => (0).(4)() = 0.4 = 2/5
5/1 = 5 = (5).()() => (5).()() = 5 = 5/1
Các thách thức
- Lấy một phân số
x
làm đầu vào, dưới dạng chuỗi, hai đầu vào, số hữu tỷ hoặc bất kỳ phương thức nào phù hợp với ngôn ngữ của bạn. - Hoán đổi các phần định kỳ và không định kỳ của biểu diễn thập phân của
x
để tạo một số mới, để lại phần trước số thập phân một mình. Phần định kỳ luôn bắt đầu càng sớm càng tốt để phần không định kỳ càng ngắn càng tốt. Ví dụ dưới đây. - Trả về số đã hoán đổi dưới dạng một phần mới. Đầu vào không nhất thiết phải giảm mặc dù đầu ra nên được. Định dạng đầu vào được phép khác với định dạng đầu ra.
- Tử số
p
củax
sẽ là một số nguyên có giá trị tuyệt đối từ một triệu trở xuống và mẫu sốq
củax
sẽ là một số nguyên khác không có giá trị tuyệt đối từ một triệu trở xuống. - Tử số
r
và mẫu sốs
của kết quả không được đảm bảo dưới một triệu. Với độ dài của các phần định kỳ của những con số này, bạn nên tránh chuyển đổi trực tiếp thành phao. - Đây là mã golf. Câu trả lời ngắn nhất trong byte thắng.
Ví dụ
1/70 = (0).(0)(142857) => (0).(142857)(0) = (0).(142857)() = 0.142857 = 142857/1000000
10/7 = (1).()(428571) => (1).(428571)() = 1.428571 = 1428571/1000000
1/13 = (0).()(076923) => (0).(076923)() = 0.076293 = 76923/1000000
3/40 = (0).(075)() => (0).()(075) = 0.075075... = 75/999 = 25/333
-2/15 = -(0).(1)(3) => -(0).(3)(1) = -0.311111... = -28/90 = -14/45
75/38 = (1).(9)(736842105263157894)
=> (1).(736842105263157894)(9) = (1).(736842105263157895)() ## since 0.999... = 1
= 1.736842105263157895 = 1736842105263157895/1000000000000000000
= 347368421052631579/200000000000000000
25/168 = (0).(148)(809523) => (0).(809523)(148) = 0.809523148148... = 870397/1080000
120/99 = (1).()(21) => (1).(21)() = 1.21 = 121/100
2/1 = (2).()() => (2).()() = 2 = 2/1
0/1 = (0).()() => (0).()() = 0 = 0/1
0/2 = (0).()() => (0).()() = 0 = 0/1
299/792 = (0).(377)(52) => (0).(52)(377) = 0.52377377... = 2093/3996
95/-14 = -(6).(7)(857142) => -(6).(857142)(7) = -6.857142777... = -12342857/1800000
-95/-14 = (6).(7)(857142) => (6).(857142)(7) = 6.857142777... = 12342857/1800000
1/7
có thể được biểu diễn như (0).()(142857)
hoặc (0).(1)(428571)
, 1
có thể được biểu diễn như (1).()()
, (0).()(9)
, (0).()(99)
, (0).(9)(9)
vv
0
ở cuối trường hợp thử nghiệm 2 (10/7
):1428571/100000
nên1428571/1000000
.