合着英语是这么学的。。。

应该用列表的,但写到一半不想改了。。。

正常逻辑就是每次对10取模,然后根据count来判断现在是个位,十位还是百位。count=3时是百位,但这会有个问题就是输入100会输出one hundred and,所以最后一步判断最后是不是多一个and,是的话去掉。

英语的逻辑就是三个0为一个大单位,然后每个大单位里面又分为个位十位和百位,规律还是蛮好找的。

num1 = ['zero','one','two','three','four','five','six',
       'seven','eight','nine','ten','eleven','twelve',
       'thirteen','fourteen','fifteen','sixteen',
       'seventeen','eighteen','nineteen']
num2 = ['','','twenty','thirty','forty','fifty','sixty',
       'seventy','eighty','ninety']
bum3 = ['thousand','million','billion']
while 1:
    try:
        n = int(input())
        count,wei = 1,0
        str1 = ''
        while n :
            if count == 1 and 0 < n%100 <= 19:
                str1 = num1[n%100] + ' ' + str1
                n = n//100
                count = count + 2
                continue
            english = n%10
            if count == 1 and english:
                str1 = num1[english] + ' ' + str1
            elif count == 2 and english:
                str1 = num2[english] + ' ' + str1
            elif count == 3 and english:
                str1 = num1[english] + ' ' +'hundred' + ' ' + 'and' + ' ' + str1
            elif count == 4:
                count = 2
                if english:
                    str1 = num1[english] + ' ' + bum3[wei] + ' ' + str1
                else:#如果大单位(即,前面。如10,000)是0的话
                    str1 = bum3[wei] + ' ' + str1
                wei = wei + 1
                n = n//10
                continue
            n = n//10
            count = count + 1
        if not str1:
            str1 = num1[n]
        elif str1.rstrip()[-3:] == 'and':
            str1 = str1.rstrip()[:-3]
        print(str1.rstrip())
    except:
        break