Я могу дать подсказку - повторяющиеся десятичные дроби в десятичной базе являются дробными со знаменателем, имеющим по крайней мере один простой множитель, кроме двух и пяти. Если знаменатель не содержит двух или пяти простых множителей, они всегда могут быть представлены знаменателем всех девяток. Тогда знаменатель - это повторяющаяся часть, а число девяток - это длина повторяющейся части.
3 _
- = 0.3
9
1 142857 ______
- = ------ = 0.142857
7 999999
Если в знаменателе есть простые множители два или пять, повторяющаяся часть начинается не с первой позиции.
17 17 ______
-- = ----- = 0.4857142
35 5 * 7
Но я не могу вспомнить, как получить неповторяющуюся часть и ее длину.
Кажется, это хорошо подходит для второй базы. Только дробь со степенью два знаменателя являются неповторяющимися. Это легко проверить, утверждая, что в знаменателе установлен только один бит.
1/2 = 1/10 = 0.1
1/4 = 1/100 = 0.01
3/4 = 11/100 = 0.11
5/8 = 101/1000 = 0.101
Все дроби с нечетными знаменателями должны повторяться, и шаблон и его длину можно получить, выразив дробь со знаменателем в виде 2^n-1
.
__
1/3 = 1/(2^2-1) = 1/11 = 0.01
__
2/3 = 2/(2^2-1) = 10/11 = 0.10
__
4/3 => 1 + 1/3 => 1.01
__
10/3 => 3 + 1/3 => 11.01
____
1/5 = 3/15 = 3/(2^4-1) = 11/1111 = 0.0011
________
11/17 = 165/255 = 11/(2^8-1) = 10100101/11111111 = 0.10100101
Что касается основы десять, я не могу сказать, как обращаться со знаменателями, содержащими, но не являющимися степенью двойки - например, 12 = 3 * 2^2
.