Кредити на виклик ідеї переходять до @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