Kredyty za pomysł na wyzwanie przejdź do @AndrewPiliser. Jego oryginalna propozycja w piaskownicy została porzucona, a ponieważ nie był tu aktywny od kilku miesięcy, podjąłem wyzwanie.
Zrównoważony trójskładnikowy jest niestandardowym systemem liczbowym. To jest jak trójkątny, na które cyfry wzrost wartości o współczynnik 3, jak pójdziesz dalej w lewo - tak100
jest9
i1001
ma 28 lat.
Jednak zamiast wartości 0, 1 i 2, cyfry mają wartości -1, 0 i 1 . (Nadal możesz użyć tego do wyrażenia dowolnej liczby całkowitej).
W przypadku tego wyzwania znaczenie cyfry +1
zostanie zapisane jako +
, -1
zostanie zapisane jako -
i 0
jest słuszne 0
. Zrównoważone trójskładnikowe nie używa -
symbolu przed liczbami, aby je zanegować, podobnie jak inne systemy liczbowe - patrz przykłady.
Twoim zadaniem jest napisanie kompletnego programu, który pobiera 32-bitową liczbę całkowitą ze znakiem dziesiętnym jako dane wejściowe i konwertuje ją na zbalansowany trójskładnikowy. Żadne wbudowane funkcje konwersji jakiegokolwiek rodzaju nie są dozwolone (Mathematica prawdopodobnie ma jedną ...). Dane wejściowe mogą być na standardowym wejściu, argumentach wiersza poleceń itp.
Zera wiodące mogą być obecne w danych wejściowych, ale nie w danych wyjściowych, chyba że dane wejściowe są 0
, w takim przypadku dane wyjściowe również powinny być 0
.
Przykłady
Są to konwersje ze zrównoważonych trójskładnikowych na dziesiętne; będziesz musiał przekonwertować w drugą stronę.
+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