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

e-maxx algorithm original: C/C++ #algorithm #emaxx #math #number-theory
El texto de la tarea se traduce del ruso para el idioma seleccionado. El código no cambia.

Источник: e-maxx.ru/algo, страница PDF 44.

Троичная сбалансированная система счисления — это нестандартная позиционная система счисления.

Основание системы равно

, однако она отличается от обычной троичной системы тем, что цифрами являются

. Поскольку использовать

для одной цифры очень неудобно, то обычно принимают какое-то

специальное обозначение. Условимся здесь обозначать минус единицу буквой .

НаEjemplo, number

в троичной сбалансированной системе записывается как

, а number

— как

. Троичная сбалансированная система счисления позволяет записывать отрицательные числа без записи отдельного знака "минус". Троичная сбалансированная система позволяет дробные числа (наEjemplo,

записывается как

).

Algoritmo перевода

Научимся переводить числа в троичную сбалансированную систему. Для этого надо сначала перевести number в троичную систему.

Ясно, что теперь нам надо избавиться от цифр

, для чего заметим, что

, т.е. мы можем заменить двойку

в текущем разряде на

, при этом увеличив следующий (т.е. слева от него в естественной записи) разряд на

. Если

мы будем двигаться по записи справа налево и выполнять вышеописанную операцию (при этом в каких-то разрядах

может происходить переполнение больше

, в таком случае, естественно, "сбрасываем" лишние тройки в

старший разряд), то придём к троичной сбалансированной записи. Как нетрудно убедиться, то же самое правило верно и для дробных чисел. Более изящно вышеописанную процедуру можно описать так. Мы берём number в троичной системе счисления,

прибавляем к нему бесконечное number

, а затем от каждого разряда результата

отнимаем единицу (уже безо всяких переносов). Зная теперь Algoritmo перевода из обычной троичной системы в сбалансированную, легко можно реализовать операции сложения, вычитания и деления — просто сводя их к соответствующим операциям над троичными несбалансированными числами.

C# solución

borrador automático, revisar antes de enviar
// C# draft for: Троичная сбалансированная система счисления
// Original e-maxx article has no compact code listing in the extracted PDF text.

C++ solución

coincidente/original
// C++ source for: Троичная сбалансированная система счисления
// Compact code block was not extracted from this article.

Java solución

borrador automático, revisar antes de enviar
// Java draft for: Троичная сбалансированная система счисления
// Original e-maxx article has no compact code listing in the extracted PDF text.

Материал разбит как Algoritmoическая Tarea: изучить постановку, понять асимптотику и реализовать Algoritmo на выбранном языке.

Vacantes para esta tarea

Se muestran vacantes activas con etiquetas coincidentes.

Todas las vacantes
Todavía no hay vacantes activas.