Bu sorunun sadece sonlanan ondalık sayıları için geçerli olması gerekmez - tekrarlanan ondalık sayılar da algoritma yoluyla kesirlere dönüştürülebilir.
Göreviniz, giriş olarak tekrarlanan bir ondalık sayı alan bir program yapmak ve ilgili ondalık sayıyı ve bu ondalık basamağı üreten paydayı (en düşük terimlerle) çıkarmaktır. 1'den büyük olan fraksiyonlar, benzeri olmayan fraksiyonlar olarak gösterilmelidir 9/5
. Girişin pozitif olacağını varsayabilirsiniz.
Tekrarlanan ondalık bu formatta verilecektir:
5.3.87
İkinci nokta tekrarlandıktan sonraki her şeyle, şöyle:
5.3878787878787...
Programınız, eğik çizgiyle (veya düz metinler çıkarmazsanız, dilinizdeki eşdeğer formu) ayırarak pay ve paydayı temsil eden iki tamsayı çıkaracaktır:
889/165
Sonlanan ondalık sayıların, ikinci noktadan sonra hiçbir şey olmayacağını ve yinelenmeyen ondalık kısım içermeyen ondalık sayıların, iki nokta arasında hiçbir şey olmayacağını unutmayın.
Test durumları
Bu test durumları, gerekli tüm köşe kasalarını kapsar:
0..3 = 1/3
0.0.3 = 1/30
0.00.3 = 1/300
0.6875. = 11/16
1.8. = 9/5
2.. = 2/1
5..09 = 56/11
0.1.6 = 1/6
2..142857 = 15/7
0.01041.6 = 1/96
0.2.283950617 = 37/162
0.000000.1 = 1/9000000
0..9 = 1/1
0.0.9 = 1/10
0.24.9 = 1/4
İsterseniz, tamsayı kısmı olmayan kesirlerin ilk noktanın solunda hiçbir şeyin olmadığını varsayabilirsiniz. Bu isteğe bağlı test durumları ile test edebilirsiniz:
.25. = 1/4
.1.6 = 1/6
..09 = 1/11
.. = 0/1
(in lowest terms)
yani, fraksiyon basitleştirilmelidir.
13
Bunun yerine çıktı almama izin verilir 13/1
mi?
1.9999...
ve çıkışı ele 2/1
1.9999.
olduğunu 19999/10000
almak için, 2/1
size gereken 1..9
bu değil mi?
9/99
mü?