def num2kanji(num):
KNUM = [u"", u"一", u"二", u"三", u"四", u"五",
u"六", u"七", u"八", u"九"]
DIGIT1 = (u"", u"十", u"百", u"千")
DIGIT2 = (u"", u"万", u"億", u"兆", u"京")
try:
num = int(num)
except ValueError:
raise ValueError("not an integer")
max = 10000 ** len(DIGIT2) - 1
if not(0 <= num < max):
raise ValueError("not in (0-%d)" % max)
if num == 0: return u"零"
str_num = str(num)
knum = []
for i in xrange(((len(str_num) + 3) / 4)):
sn = str_num[-1-i*4:-5-i*4:-1]
if sn != "0000":
knum.append(DIGIT2[i] + " ")
for j, n in enumerate(map(int, sn)):
if n != 0:
knum.append(DIGIT1[j])
if not(n == 1 and j):
knum.append(KNUM[n])
knum.reverse()
return "".join(knum).rstrip()
while 1:
try:
print num2kanji(raw_input(">> "))
except ValueError, e:
print e
except EOFError:
break
>> 0
零
>> 1540001
百五十四万 一
>> 43005421003
四百三十億 五百四十二万 千三
>> 224767477905006
二百二十四兆 七千六百七十四億 七千七百九十万 五千六
>> 60093000611220000769
六千九京 三千兆 六千百十二億 二千万 七百六十九
>> -1
not in (0-99999999999999999999)
>> 1000000000000000000000000000
not in (0-99999999999999999999)
>> 89.97
not an integer