E015. Троичная сбалансированная система счисления
emaxx algorithm
Task
Источник: e-maxx.ru/algo, страница PDF 44.
Троичная сбалансированная система счисления — это нестандартная позиционная система счисления.
Основание системы равно
, однако она отличается от обычной троичной системы тем, что цифрами являются
. Поскольку использовать
для одной цифры очень неудобно, то обычно принимают какое-то
специальное обозначение. Условимся здесь обозначать минус единицу буквой .
Например, число
в троичной сбалансированной системе записывается как
, а число
— как
. Троичная сбалансированная система счисления позволяет записывать отрицательные числа без записи отдельного знака "минус". Троичная сбалансированная система позволяет дробные числа (например,
записывается как
).
Алгоритм перевода
Научимся переводить числа в троичную сбалансированную систему. Для этого надо сначала перевести число в троичную систему.
Ясно, что теперь нам надо избавиться от цифр
, для чего заметим, что
, т.е. мы можем заменить двойку
в текущем разряде на
, при этом увеличив следующий (т.е. слева от него в естественной записи) разряд на
. Если
мы будем двигаться по записи справа налево и выполнять вышеописанную операцию (при этом в каких-то разрядах
может происходить переполнение больше
, в таком случае, естественно, "сбрасываем" лишние тройки в
старший разряд), то придём к троичной сбалансированной записи. Как нетрудно убедиться, то же самое правило верно и для дробных чисел. Более изящно вышеописанную процедуру можно описать так. Мы берём число в троичной системе счисления,
прибавляем к нему бесконечное число
, а затем от каждого разряда результата
отнимаем единицу (уже безо всяких переносов). Зная теперь алгоритм перевода из обычной троичной системы в сбалансированную, легко можно реализовать операции сложения, вычитания и деления — просто сводя их к соответствующим операциям над троичными несбалансированными числами.
C# solution
auto-draft, review before submit// C# draft for: Троичная сбалансированная система счисления
// Original e-maxx article has no compact code listing in the extracted PDF text.C++ solution
matched/original// C++ source for: Троичная сбалансированная система счисления
// Compact code block was not extracted from this article.Java solution
auto-draft, review before submit// Java draft for: Троичная сбалансированная система счисления
// Original e-maxx article has no compact code listing in the extracted PDF text.Explanation
Материал разбит как алгоритмическая задача: изучить постановку, понять асимптотику и реализовать алгоритм на выбранном языке.