Her rasyonel sayının ondalık gösteriminde, p/q
periyodik 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 point
tek 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.25
bu 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
x
Girdi, 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
x
tek 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
p
arasındax
mutlak bir milyon ya da daha az bir değer ve payda bir tamsayı olacaktırq
vex
bir olacaktır sıfır olmayan bir milyon ya da daha az bir mutlak değere sahip bir tam sayı. - Sonucun pay
r
ve paydasınıns
bir 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/7
olarak temsil edilebilir (0).()(142857)
ya da (0).(1)(428571)
, 1
temsil edilebilir olarak (1).()()
, (0).()(9)
, (0).()(99)
, (0).(9)(9)
, vb
0
Testin sonunda bir eksiklik var (210/7
):1428571/100000
olmalıdır1428571/1000000
.