E015. Троичная сбалансированная система счисления
Источник: e-maxx.ru/algo, страница PDF 44.
Троичная сбалансированная система счисления — это нестандартная позиционная система счисления.
Основание системы равно
, однако она отличается от обычной троичной системы тем, что цифрами являются
. Поскольку использовать
для одной цифры очень неудобно, то обычно принимают какое-то
специальное обозначение. Условимся здесь обозначать минус единицу буквой .
На示例, number
в троичной сбалансированной системе записывается как
, а number
— как
. Троичная сбалансированная система счисления позволяет записывать отрицательные числа без записи отдельного знака "минус". Троичная сбалансированная система позволяет дробные числа (на示例,
записывается как
).
算法 перевода
Научимся переводить числа в троичную сбалансированную систему. Для этого надо сначала перевести number в троичную систему.
Ясно, что теперь нам надо избавиться от цифр
, для чего заметим, что
, т.е. мы можем заменить двойку
в текущем разряде на
, при этом увеличив следующий (т.е. слева от него в естественной записи) разряд на
. Если
мы будем двигаться по записи справа налево и выполнять вышеописанную операцию (при этом в каких-то разрядах
может происходить переполнение больше
, в таком случае, естественно, "сбрасываем" лишние тройки в
старший разряд), то придём к троичной сбалансированной записи. Как нетрудно убедиться, то же самое правило верно и для дробных чисел. Более изящно вышеописанную процедуру можно описать так. Мы берём number в троичной системе счисления,
прибавляем к нему бесконечное number
, а затем от каждого разряда результата
отнимаем единицу (уже безо всяких переносов). Зная теперь 算法 перевода из обычной троичной системы в сбалансированную, легко можно реализовать операции сложения, вычитания и деления — просто сводя их к соответствующим операциям над троичными несбалансированными числами.
C# 解法
自动草稿,提交前请检查// C# draft for: Троичная сбалансированная система счисления
// Original e-maxx article has no compact code listing in the extracted PDF text.
C++ 解法
匹配/原始// C++ source for: Троичная сбалансированная система счисления
// Compact code block was not extracted from this article.
Java 解法
自动草稿,提交前请检查// Java draft for: Троичная сбалансированная система счисления
// Original e-maxx article has no compact code listing in the extracted PDF text.
Материал разбит как 算法ическая 题目: изучить постановку, понять асимптотику и реализовать 算法 на выбранном языке.
Vacancies for this task
活跃职位 with overlapping task tags are 已显示.