Есть ли алгоритм для вычисления следующих вещей?
- Если результат деления является повторяющимся десятичным (в двоичном выражении).
- Если он повторяется, на какой цифре (представленной как мощность 2) начинается повторение?
- Какие цифры повторяются?
Некоторые примеры:
1/2 = 1/10 = 0.1 // 1 = false, 2 = N/A, 3 = N/A, 4 = N/A
1/3 = 1/11 = 0.010101... // 1 = true, 2 = -2, 3 = 10
2/3 = 10/11 = 0.101010... // 1 = true, 2 = -1, 3 = 10
4/3 = 100/11 = 1.010101... // 1 = true, 2 = 0, 3 = 10
1/5 = 1/101 = 0.001100110011... // 1 = true, 2 = -3, 3 = 1100
Есть ли способ сделать это? Эффективность - большая проблема. Описание алгоритма было бы предпочтительнее кода, но я возьму, какой ответ я могу получить.
Также стоит отметить, что база не имеет большого значения; Я могу преобразовать алгоритм в двоичный (или если он в, например, base 256, чтобы использовать char
для удобства, я мог бы просто использовать это). Я говорю это, потому что, если вы объясняете, вам может быть проще объяснить в базе 10:).