Her rasyonel sayının ondalık gösteriminde, p/qperiyodik bir kuyruğa, periyodik olmayan bir başa ve ondalık sayıdan önce aşağıdaki biçimde bir bölüme sahipsiniz:
(before decimal point).(non-periodic)(periodic)
Bazı örnekler:
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)
Buradaki zorluk, periyodik ve periyodik olmayan parçaları, before decimal pointtek başına bırakarak yeni bir sayı oluşturmak için değiştirmektir. Örneğin:
25/168 = 0.148809523... = (0).(148)(809523)
=> (0).(809523)(148) = 0.809523148148... = 870397/1080000
Bir sayının periyodik bir bölümü yoksa, 0.25bu sayıyı yeni bir periyodik sayıya çevirin ve bunun tersi de geçerlidir.
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
Meydan okuma
xGirdi, dize, iki giriş, rasyonel bir sayı veya dilinize uygun herhangi bir yöntem gibi bir kesir alın .- Takas ondalık temsil periyodik ve periyodik olmayan parçalar
xtek başına ondalık önce kısmını bırakarak yeni bir numara oluşturun. Periyodik kısım daima mümkün olan en kısa sürede başlar, böylece periyodik olmayan kısım mümkün olduğu kadar kısa olur. Örnekler aşağıdadır. - Değiştirilen sayıyı yeni bir kesir olarak döndür. Çıktı olması gerektiği halde girdi mutlaka azaltılmaz. Giriş formatının, çıkış formatından farklı olmasına izin verilir.
- Pay
parasındaxmutlak bir milyon ya da daha az bir değer ve payda bir tamsayı olacaktırqvexbir olacaktır sıfır olmayan bir milyon ya da daha az bir mutlak değere sahip bir tam sayı. - Sonucun pay
rve paydasınınsbir milyondan az olması garanti edilmez. Bu sayıların periyodik kısımlarının uzunluğu göz önüne alındığında, doğrudan yüzer maddelere dönüşmekten kaçınmanız önerilir. - Bu kod golfü. Bayt cinsinden en kısa cevap kazanır.
Örnekler
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/7olarak temsil edilebilir (0).()(142857) ya da (0).(1)(428571), 1temsil edilebilir olarak (1).()(), (0).()(9), (0).()(99), (0).(9)(9), vb
0Testin sonunda bir eksiklik var (210/7):1428571/100000olmalıdır1428571/1000000.