Кредиты для идеи конкурса идут в @AndrewPiliser. Его первоначальное предложение в песочнице было заброшено, и, поскольку он не работал здесь в течение нескольких месяцев, я принял вызов.
Сбалансированная троичная система является нестандартной системой счисления. Это похоже на троицу в том смысле, что цифры увеличиваются в 3 раза по мере того, как вы идете дальше влево - то100
есть9
и1001
есть 28.
Однако вместо значений 0, 1 и 2 цифры имеют значения -1, 0 и 1 . (Вы все еще можете использовать это, чтобы выразить любое целое число.)
Для этой задачи значение цифры +1
будет записано как +
, -1
будет записано как -
и 0
просто 0
. Сбалансированный троичный -
символ не использует символ перед числами, чтобы отрицать их, как это делают другие системы счисления - см. Примеры.
Ваша задача - написать полную программу, которая принимает 32-разрядное десятичное целое число со знаком в качестве входных данных и преобразует его в сбалансированную троичную форму. Никакие встроенные базовые функции преобразования любого вида не допускаются (Mathematica, вероятно, имеет одну ...). Ввод может быть на стандартном вводе, аргументах командной строки и т. Д.
Ведущие нули могут присутствовать на входе, но не на выходе, если только это не вход 0
, и в этом случае также должен быть вывод 0
.
Примеры
Это преобразования из сбалансированного троичного в десятичное; вам придется конвертировать в другую сторону.
+0- = 1*3^2 + 0*3^1 + -1*3^0 = 9 + 0 + -1 = 8
+-0+ = 1*3^3 + -1*3^2 + 0*3^1 + 1*3^0 = 27 + -9 + 0 + 1 = 19
-+++ = -1*3^3 + 1*3^2 + 1*3^1 + 1*3^0 = -27 + 9 + 3 + 1 = -14