E015. Троичная сбалансированная система счисления

e-maxx algorithm original: C/C++ #algorithm #emaxx #math #number-theory
题目文本会按所选界面语言从俄语翻译;代码保持不变。

Источник: 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 已显示.

所有职位
目前还没有活跃职位。