Problem:


対称３進数

1 グラム、3 グラム、9 グラム、27 グラムのおもりが１つずつあれば、天びんを使って 1 グラムから 40グラムまで 1 グラム刻みで量れることが知られています。たとえば、天びんの一方の皿に重さを量りたいものと 3 グラムのおもりを載せ、もう一方の皿に 27 グラムと 1 グラムのおもりを載せて釣り合えば、量りたいものの重さは 27-3+1=25 グラムだとわかります。 さらに、1(=30)グラム、31 グラム、... 、3n-1 グラム、3n グラムまでのおもりが１つずつあれば、天びんを使って(3n+1-1)/2グラムまで量れることが知られています。また、天びんが釣り合うようなおもりの置き方は一通りしかないことも知られています。

量りたいものとおもりを天びんに置いて、釣り合うようなおもりの置き方を文字列で表すことができます。3i グラムのおもりを量りたいものと同じ皿に載せたときは「-」、もう一方の皿に載せたときは「+」、どちらにも載せなかったときは「0」を文字列の右端からi番目に書きます（右端を０番目と数えます）。たとえば、先ほどの 25 グラムの例は +0-+ と表わせます。

それでは、量りたいものの重さが与えられたとき、天びんが釣り合うようなおもりの置き方を表す文字列を出力するプログラムを作成してください。ただし、３のべき乗グラムのおもりは、どのような重さのものでも必ず１つあるものとします。

（補足： 対称３進数について）

量りたいものの重さがwのとき、おもりの置き方を表す文字列はwの対称３進数になっています。対称３進数とは、３のべき乗の数で位取りを行い、各位に数 1、0、-1 を表す文字を書くことで表した数のことです。上の文字列では、文字「+」、「0」、「-」がそれぞれ数 1、0、-1 に対応します。たとえば、25 グラムのものを量るときのおもりの置き方が +0-+ である対称３進数が表す数は、1 &times; 33 + 0 &times; 32 - 1&times; 31 + 1 &times; 30 = 25 となります。

入力

入力は以下の形式で与えられる。

w

w (1 ≤ w ≤ 100000) は量りたいものの重さを表す整数である。

出力

おもりの置き方を表す文字列を出力する。ただし文字列の左端を 0 にしてはならない。

入出力例 

入力例１

25

出力例１

+0-+

入力例２ 

2

出力例２

+-

入力例３ 

5

出力例３

+--



Sample input:
25


Sample output:
+0-+

Submission status: Accepted

Solution code:
W = int(input())

w3 = []

while W > 0:
    w3.append(W % 3)
    W = W // 3
w3.append(0)

for i in range(len(w3)-1):
    if w3[i] > 1:
        w3[i] = w3[i] - 3
        w3[i+1] = w3[i+1] + 1

w3.reverse()

if w3[0] == 1:
    print("+", end="")
elif w3[0] == -1:
    print("-", end="")
    
for i in range(1, len(w3)):
    if w3[i] == 1:
        print("+", end="")
    elif w3[i] == 0:
        print("0", end="")
    elif w3[i] == -1:
        print("-", end="")
        
print("")

Submission status: Accepted

Solution code:
n=int(input())
a=''
while n:
    if n%3==2:a+='-';n+=1
    elif n%3:a+='+'
    else:a+='0'
    n//=3
print(a[::-1])

Submission status: Accepted

Solution code:
w = int(input())

result = []
chars = '0+-'
n = 0
while w > (3 ** n - 1) // 2:
    result.append(chars[(w + (3 ** n - 1) // 2) // (3 ** n) % 3])
    n += 1

result.reverse()
print(''.join(result))

Submission status: Accepted

Solution code:
w = int(input())

result = ''
chars = '0+-'
n = 0
while w > (3 ** n - 1) // 2:
    result += chars[(w + (3 ** n - 1) // 2) // (3 ** n) % 3]
    n += 1

print(result[::-1])

Submission status: Accepted

Solution code:
# Aizu Problem 0306: Symmetric Ternary Number

import sys, math, os

# read input:
PYDEV = os.environ.get('PYDEV')
if PYDEV=="True":
    sys.stdin = open("sample-input.txt", "rt")


N = int(input())
ans = ""
while N > 0:
    if N % 3 == 2:
        ans += '-'
        N += 1
    elif N % 3 == 1:
        ans += '+'
    else:
        ans += '0'
    N //= 3
print(ans[::-1])

Submission status: Accepted

Solution code:
s = ""
n = int(input())
while True:
    if n % 3 == 0:s = "0" + s
    elif n % 3 == 1:s = "+" + s
    else:
        s = "-" + s
        n += 1
    n = n // 3
    if n == 0:break
print(s)

Submission status: Accepted

Solution code:
w = int(input())
ans = ""
while w:
  if w % 3 == 0:
    ans += "0"
    w //= 3
  elif w % 3 == 1:
    ans += "+"
    w //= 3
  elif w % 3 == 2:
    ans += "-"
    w = (w + 1) // 3
print(ans[::-1])

Submission status: Accepted

Solution code:
#! /usr/bin/env python

from itertools import product, starmap, dropwhile
from math import log

n = int(input())
m = int(log(n, 3)) + 2
for a in product([-1, 0, 1], repeat=m):
    if n == sum(starmap(lambda t, x: 3 ** t * x, zip(reversed(range(m)), a))):
        print("".join(map(lambda x: "-0+"[x + 1], dropwhile(lambda x: x == 0, a))))
        break

Submission status: Accepted

Solution code:
w = int(input())
res = ''
while w > 0:
    if w%3 == 0:
        res += '0'
    elif w%3 == 1:
        res += '+'
    else:
        res += '-';
        w += 1
    w //= 3
print( res[::-1] )

Submission status: Accepted

Solution code:
import heapq
from collections import deque
from enum import Enum
import sys
import math
from _heapq import heappush, heappop
import copy

BIG_NUM = 2000000000
HUGE_NUM = 99999999999999999
MOD = 1000000007
EPS = 0.000000001

sys.setrecursionlimit(3**12)

SIZE = 15

POW = [1]*SIZE
for i in range(1,SIZE):
    POW[i] = POW[i-1]*3

W = int(input())

max_digit = None
for i in range(SIZE):
    if (POW[i]-1)//2 >= W:
        max_digit = i
        break

ans =  [None]*(max_digit+1)
work = [None]*(max_digit+1)

def recursive(digit,tmp_sum):
    global ans,work,W,max_digit
    if digit == -1:
        if tmp_sum == W:
            for i in range(max_digit,-1,-1):
                ans[i] = work[i]
        return
    work[digit] = '0'
    recursive(digit-1,tmp_sum)
    work[digit] = '+'
    recursive(digit-1,tmp_sum+POW[digit])
    if tmp_sum > 0:
        work[digit] = '-'
        recursive(digit-1,tmp_sum-POW[digit])

recursive(max_digit,0)

is_First = True
for i in range(max_digit,-1,-1):
    if ans[i] == '0':
        if is_First:
            continue
        else:
            print("0",end="")
    elif ans[i] == '+':
        is_First = False
        print("+",end="")
    else: #ans[i] == '-'
        is_First = False
        print("-",end="")
print()

Submission status: Accepted

Solution code:

n=int(input())
l=[]
while n:
    if n%3==0:l=["0"]+l;n//=3
    elif n%3==1:l=["+"]+l;n=(n-1)//3
    else:l=["-"]+l;n=(n+1)//3
print("".join(l))

Submission status: Accepted

Solution code:
from itertools import product

def calc(x):
    c = 0; y = 1
    while 1:
        if abs(x - y) <= (y - 1) // 2:
            R = [0]*(c+1)
            R[c] = 1
            if x < y:
                r = calc(y - x)
                for i in range(len(r)):
                    R[i] = -r[i]
            elif x > y:
                r = calc(x - y)
                for i in range(len(r)):
                    R[i] = r[i]
            return R
        y *= 3
        c += 1
print(*map({-1: '-', 0: '0', 1: '+'}.__getitem__, reversed(calc(int(input())))), sep='')

Submission status: WA: Presentation Error

Solution code:

W = int(input())

w3 = []

while W > 0:
    w3.append(W % 3)
    W = W // 3
w3.append(0)

for i in range(len(w3)-1):
    if w3[i] > 1:
        w3[i] = w3[i] - 3
        w3[i+1] = w3[i+1] + 1

w3.reverse()

if w3[0] == 1:
    print("+", end="")
elif w3[0] == -1:
    print("-", end="")
    
for i in range(1, len(w3)):
    if w3[i] == 1:
        print("+", end="")
    elif w3[i] == 0:
        print("0", end="")
    elif w3[i] == -1:
        print("-", end="")