Problem:
図書整理

数の表わし方には色々な種類があり、私たちが普段使っている 10 進数は一つの代表的なものでしかありません。コンピュータ関連の知識がある人には、2 進数、16 進数あたりはとても身近なものです。

N さんは司書資格を活かして司書の仕事に就きました。最初の仕事は図書整理です。この図書館では、一冊ごとに一貫して番号が与えられており、それに従って本を整理しています。

この図書館では本の番号をマイナス十進数で表すことになっています。

マイナス十進数は、anan−1an−2...a2a1a0 (各ai は 0~9 の数字) と表記する方法であり、この数は次の数を表します。

an×(−10)n + an−1×(−10)n−1 + ... + a2×(−10)2 + a1×(−10)1 + a0×(−10)0

たとえば、マイナス十進数の 2156 は、以下のとおり十進数の-1944 に対応しています。

2×(-10)3 + 1×(-10)2 + 5×(-10)1 + 6×(-10)0 =

2×(-1000) + 1×(100) + 5×(-10) + 6×(1) =

-2000 + 100 - 50 + 6 = -1944

十進数の番号をマイナス十進数に直すのは大変なので、N さんは大変不自由な思いをしています。

本の番号を入力とし、 この番号のマイナス十進数表記を出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。各データセットとして、本の番号を表す整数 A (-231 ≤ A < 231) が１行に与えられます。

データセットの数は 1200 を超えません。

Output

入力データセットごとに、番号のマイナス十進数表記を１行に出力します。

Sample Input

9
10
-10
-1944
-305432133
0

Output for the Sample Input

9
190
10
2156
1715573947

Solution in Python (judge verdict: Accepted)

import math

def func(n):
    #check length
    q=int(math.log10(abs(n)))
    if n*(-1)**(q%2)>0:
        p=(-10)**(q)*(n/(-10)**(q))
    else:
        p=(-10)**(q+1)
    r=n-p
    return (abs(p), r)
    
def check_safe_oc(ans, ap):
    q=int(math.log10(ap))
    if ans==0 or q>int(math.log10(ans)): return [True , q]
    anq= ((ans%10**(q+1))/10**q)*10**q
    return [int(math.log10(ap+anq))==q , q]


def addans(ans,ap):
    coc,q=check_safe_oc(ans,ap)
    if coc:
        ans+=ap
    else:
        ans  = (ans/10**(q+1))*10**(q+1)+ans%10**q
        ans +=  9*10**(q+1)
        ans = addans(ans,10**(q+2))
    return ans

#for n in range(910,100000):
#    norg=n
#    ans=0
#    while(n!=0):
#        [ap,n]=func(n)
#        ans=addans(ans,ap)
#    if norg!=checkok(ans):
#        print norg,ans,checkok(ans)
#        break
#def checkok(ans):
#    ret=0
#    sa=str(ans)
#    lena=len(sa)
#    for i in range(lena):
#        ret+=int(sa[-i-1])*(-10)**(i)
#    return ret

while(1):
    n=int(raw_input())
    if n==0:
        break
    ans=0
    while(n!=0):
        [ap,n]=func(n)    
        ans=addans(ans,ap)
    print ans