首页 > 试题广场 >

学英语

[编程题]学英语
  • 热度指数:125797 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}你需要编写一个程序,使得对于输入的整数,输出其对应的英文单词。

\hspace{15pt}具体地,规则如下:
{\hspace{20pt}}_\texttt{1.}\,三位数字看成一整体,每三位数后添加一个计数单位,从小到大依次为 thousand(千)、million(百万);
{\hspace{20pt}}_\texttt{2.}\,对于百万以下、千以上的数字,通用公式为 x \textrm{ thousand } y ,其中 xy 代表数字;
{\hspace{20pt}}_\texttt{3.}\,对于百万以上的数字,通用公式为 x \textrm{ million } y \textrm{ thousand } z ,其中 xyz 代表数字;
{\hspace{20pt}}_\texttt{4.}\,每三位数内部,十位和个位之间,需要添加 and ;特别地,若百位为 0 ,则不添加。例如,1\,234 的英文为 one thousand two hundred and thirty four ,1\,034 的英文为 one thousand thirty four 。

\hspace{15pt}让我们再来看几个例子:
\hspace{23pt}\bullet\,22:twenty two ;
\hspace{23pt}\bullet\,100:one hundred
\hspace{23pt}\bullet\,145:one hundred and forty five ;
\hspace{23pt}\bullet\,1\,234:one thousand two hundred and thirty four ;
\hspace{23pt}\bullet\,8\,088:eight thousand eighty eight ;
\hspace{23pt}\bullet\,486\,669:four hundred and eighty six thousand six hundred and sixty nine ;
\hspace{23pt}\bullet\,1\,652\,510:one million six hundred and fifty two thousand five hundred and ten 。

输入描述:
\hspace{15pt}在一行上输入一个整数 n \left(1 \leqq n \leqq 2 \times 10^6\right) 代表待转换的整数。


输出描述:
\hspace{15pt}输出若干个小写的英文单词,代表转换后的结果。
示例1

输入

22

输出

twenty two
示例2

输入

2000000

输出

two million
定义三个字典,主要问题是在哪儿插入空格和and
ge = {1:'one',2:'two',3:'three',4:'four',5:'five',6:'six',7:'seven',8:'eight',9:'nine'}
shi = {20:'twenty',30:'thirty',40:'forty',50:'fifty',60:'sixty',70:'seventy',80:'eighty',90:'ninety'}
shiji = {10:'ten',11:'eleven',12:'twelve',13:'thirteen',14:'fourteen',15:'fifteen',16:'sixteen',17:'seventeen',18:'eighteen',19:'nineteen'}
  
def turn(x):
    z = x
    y = ''
    n = 100
    while z > 0:
        f2 = int(z/n)
        z = int(z % n)
        f3 = n
        n = n / 10
        if f2 == 0:
            if f3 == 100:
                continue
            if f3 == 10 and y != '' and x%10 != 0:
                y = y + 'and' + ' '
        else:
            if f3 == 100:
                y = y + ge[f2] + ' ' + 'hundred' + ' '
                continue
            elif f3 == 10:
                if y != '':
                    y = y + 'and' + ' '
                if f2 == 1:
                    y = y + shiji[int(x%100)]
                    break
                else:
                    if x%10 == 0:
                        y = y + shi[f2*10]
                        break
                    else:
                        y = y + shi[f2*10] + ' '
            elif f3 == 1:
                y = y + ge[f2]
    return y
  
num = int(input())
fanyi = ''
million = int(num/1000000)
thousand = int((num%1000000)/1000)
single = num%1000
num1 = [million,thousand,single]
f1 = 4
for i in num1:
    f1 -= 1
    if i == 0:
        continue
    else:
        if f1 == 3:
            fanyi = fanyi + turn(i) + ' ' + 'million' + ' '
              
        elif f1 == 2:
            fanyi = fanyi + turn(i) + ' ' +'thousand' + ' '
        elif f1 == 1:
            fanyi = fanyi + turn(i)
print(fanyi)


发表于 2024-10-10 18:20:28 回复(0)
def num1_to_words(num):
    ones = ['zero','one','two','three','four','five','six','seven','eight','nine']
    return ones[int(num)]
def num2_to_words(num):
    teens = ['','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen']
    tens = ['','','twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']
    if int(num) < 20:
        if num=='10':
            return 'ten'
        else:
            return teens[int(num[1])]
    else:
        if num[-1]=='0':
            return tens[int(num[0])]
        else:
            return tens[int(num[0])]+' '+ num1_to_words(num[1])
def num3_to_words(num):
    if num == '000':
        return ''
    elif num[:2] =='00':
        return num1_to_words(num[2])
    elif num[1:] =='00':
        return num1_to_words(num[0]) +' hundred'
    elif num[0] == '0':
        return num2_to_words(num[1:])
    elif num[1] =='0':
        return num1_to_words(num[0]) +' hundred and '+num1_to_words(num[2])
    else:
        return num1_to_words(num[0]) +' hundred and '+num2_to_words(num[1:])
def num_to_words(num):
    if len(num)==1:
        return num1_to_words(num)
    elif len(num)==2:
        return num2_to_words(num)
    else:
        return num3_to_words(num)

num = input()
if len(num)<=3:
    print(num_to_words(num))
elif 3<len(num)<=6:
    print(num_to_words(num[:-3])+' thousand ' + num_to_words(num[-3:]))
else:
    print(num_to_words(num[:-6])+' million ' +num_to_words(num[-6:-3])+' thousand ' + num_to_words(num[-3:]))

发表于 2024-09-30 20:52:42 回复(0)
拿列表乱写一通。被and骗了好几下
def teens(n):
        L=['','one','two','three','four','five','six','seven','eight','nine','ten',
        'eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen',
        'eighteen','nineteen']
        T=['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']
        if (n<20):
            return L[n]
        elif n%10==0:
            return T[int(n/10)-2]
        else:
            return T[int(n/10)-2]+' '+L[n%10]
def hundreds(n):
    h=int(n/100)
    yu=n%100
    if h>0:
        if (yu==0):
            return teens(h)+' hundred'
        return teens(h)+' hundred and '+teens(n-h*100)
    else:
        return teens(n)
n=int(input())
string=''
b=int(n/1000000)
if b>0:
    string=teens(b)+' million'
    n=n%1000000
m=int(n/1000)
if m>0:
    if string !='':
        string=string+' '
    string=string+hundreds(m)+' thousand'
    n=n%1000
if string !='':
        string=string+' '
string=string+hundreds(n)
print(string)


发表于 2024-07-31 16:55:34 回复(0)
应该是全网最简单粗暴的解法
a = input()
dic = {
    "1": "one",
    "2": "two",
    "3": "three",
    "4": "four",
    "5": "five",
    "6": "six",
    "7": "seven",
    "8": "eight",
    "9": "nine",
    "10": "ten",
    "11": "eleven",
    "12": "twelve",
    "13": "thirteen",
    "14": "fourteen",
    "15": "fifteen",
    "16": "sixteen",
    "17": "seventeen",
    "18": "eighteen",
    "19": "nineteen",
    "20": "twenty",
    "30": "thirty",
    "40": "forty",
    "50": "fifty",
    "60": "sixty",
    "70": "seventy",
    "80": "eighty",
    "90": "ninety",
}


def numbertrans(a):
    b = []
    try:
        try:
            b.append(dic[a[-2:]])
        except:
            if not a[-2] == "0":
                if not a[-1] == "0":
                    b.append(dic[a[-1]])
                b.append(dic[a[-2] + "0"])
            else:
                try:
                    b.append(dic[a[-1]])
                except:
                    pass

        if a[-3] and not a[-3] == "0":
            if not b == []:
                b.append("and")
            b.append("hundred")
            b.append(dic[a[-3]])
    except:
        return " ".join(b[::-1])
    return " ".join(b[::-1])


num = numbertrans(a[-3:])
if len(a) > 3:
    num = numbertrans(a[-6:-3]) + " thousand "+num
if len(a) > 6:
    num = numbertrans(a[-9:-6]) + " million " + num
if len(a) > 9:
    num = numbertrans(a[-12:-9]) + " billion " + num
print(num)


发表于 2023-10-12 13:41:40 回复(0)
num = int(input())

hashMap = {
        1: "one",
        2: "two",
        3: "three",
        4: "four",
        5: "five",
        6: "six",
        7: "seven",
        8: "eight",
        9: "nine",
        10: "ten",
        11: "eleven",
        12: "twelve",
        13: "thirteen",
        14: "fourteen",
        15: "fifteen",
        16: "sixteen",
        17: "seventeen",
        18: "eighteen",
        19: "nineteen",
        20: "twenty",
        30: "thirty",
        40: "forty",
        50: "fifty",
        60: "sixty",
        70: "seventy",
        80: "eighty",
        90: "ninety",
        100: "one hundred",
        200: "two hundred",
        300: "three hundred",
        400: "four hundred",
        500: "five hundred",
        600: "six hundred",
        700: "seven hundred",
        800: "eight hundred",
        900: "nine hundred",
    }

def getNumberWord(w):
    return hashMap[w]

def getThreeWord(t1, t2, t3):
    temp = ""
    if t1 != 0:
        if t2 != 0&nbs***bsp;t3 != 0:
            temp = getNumberWord(t1) + " hundred and "
        else:
            temp = getNumberWord(t1) + " hundred "
    if t2 != 0:
        if t2 == 1:
            temp += getNumberWord(t2*10+t3)
        else:
            temp += getNumberWord(t2*10) + " "
    return temp

if num in hashMap:
    print(getNumberWord(num))
    exit()
ans = []
while num > 0:
    t = num % 10
    num = int(num/10)
    ans.append(t)
size = len(ans)
res = ""
if size >= 7:
    res += getNumberWord(ans[6]) + " million "
    res += getThreeWord(ans[5], ans[4], ans[3])
    if ans[3] != 0:
        res += getNumberWord(ans[3]) + " thousand "
    else:
        res += "thousand "
    res += getThreeWord(ans[2], ans[1], ans[0])
elif size >= 4:
    if size >= 6:
        res += getThreeWord(ans[5], ans[4], ans[3])
    elif size >= 5:
        res += getNumberWord(ans[4] * 10) + " "
    if ans[3] != 0:
        res += getNumberWord(ans[3]) + " thousand "
    else:
        res += "thousand "
    res += getThreeWord(ans[2], ans[1], ans[0])
elif size >= 3:
    res += getThreeWord(ans[2], ans[1], ans[0])
else:
    res += getNumberWord(ans[1]*10) + " "
if ans[1] != 1 and ans[0] != 0:
    res += getNumberWord(ans[0])
    
print(res)

发表于 2023-03-14 18:40:56 回复(0)
分组读取
num = input()

rel = {1:"one",2:"two",3:"three",4:"four",5:"five",
        6:"six",7:"seven",8:"eight",9:"nine",10:"ten",
        11:"eleven",12:"twelve",13:"thirteen",15:"fifteen",
        20:"twenty",30:"thirty",50:"fifty",18:"eighteen",
        80:"eighty",14:"forteen",40:"forty"}
for i in range(6,10):
    if i == 8: continue
    rel[10 + i] = rel[i] + "teen"
    rel[10 * i] = rel[i] + "ty"
#print(rel)
unit = ["thousand","million","billion"]

res = []
while len(num) > 0:
    temp_res = ""
    temp_three = int(num[-3:])
    # avoid num like 5000000
    if temp_three == 0:
        res.append("")
        num = num[:-3]
        continue
    if temp_three <= 20:
        temp_res = rel[temp_three]
        res.append(temp_res)
    else:
        # may be it's 100&nbs***bsp;over that
        if temp_three % 10 != 0:
            temp_res = rel[temp_three % 10]
        if temp_three // 10 > 0:
            temp_three //= 10
            #print(temp_three)
            if temp_three % 10 != 0:
                middle = " "
                if temp_res == "":
                    middle = ""
                temp_res = rel[temp_three % 10 * 10] + middle + temp_res
            if temp_three // 10 > 0:
                # avoid num like 119
                if int(num[-3:]) % 100 <= 19 and int(num[-3:]) % 100 > 0:
                    temp_res = rel[int(num[-3:]) // 100] + " hundred and " + rel[int(num[-3:]) % 100]
                    res.append(temp_res)
                    num = num[:-3]
                    continue
                temp_three //= 10
                middle = " hundred and "
                # avoid num like 100
                if temp_res == "":
                    middle = " hundred"
                temp_res = rel[temp_three] + middle + temp_res
        res.append(temp_res)
    # move cursor
    num = num[:-3]
ans = ""
for i in range(len(res)):
    if i + 1 < len(res):
        if res[i + 1] == "":
            continue
        ans = unit[i] + " " + res[i] + " " + ans
    else:
        ans = res[i] + " " + ans

print(ans)


发表于 2023-02-15 15:58:33 回复(0)
gewei = {'1':'one', '2':'two', '3':'three', '4':'four', '5':'five', \
         '6':'six', '7':'seven', '8':'eight', '9':'nine'}
shiwei = {'2':'twenty', '3':'thirty', '4':'forty', '5':'fifty', \
         '6':'sixty', '7':'seventy', '8':'eighty', '9':'ninety','0':''}
shiji = {'1':'eleven', '2':'twelve', '3':'thirteen', '4':'fourteen', '5':'fifteen', \
         '6':'sixteen', '7':'seventeen', '8':'eighteen', '9':'nineteen','0':'ten'}
mid = ['', ' thousand ',' million ', ' billion ']
def threesum(a):
    ans = ''
    if len(a) == 1:
        ans = gewei[a]
    
    elif len(a) == 2:
        if a[0] == '1':
            ans = shiji[a[1]]
        else:
            if a[1] == '0':
                ans = shiwei[a[0]]
            else:
                if a[0] == '0':
                    ans = gewei[a[1]]
                else:
                    ans = shiwei[a[0]] + ' ' +  gewei[a[1]]
    
    elif len(a) == 3:
        if a[0] == '0':
            ans = threesum(a[1] + a[2])
        else:
            ans = '{} hundred'.format(gewei[a[0]])
            if (a[1] + a[2]) != '00':
                ans += ' and '
                ans += threesum(a[1] + a[2])
    return ans
stri = str(input())
strlist = []
if len(stri) % 3 != 0:
    stri = '0'*(3 - len(stri) % 3) + stri
item = ''
count = 0
for i in stri:
    item += i
    count += 1
    if count == 3:
        strlist.append(item)
        item = ''
        count = 0
strlist[0] = str(int(strlist[0]))
ans = ''
for i in range(len(strlist)):
    ans += threesum(strlist[i])
    ans += mid[len(strlist) - i - 1]
print(ans)

发表于 2022-09-07 16:57:58 回复(0)
python3 这题做的我想死
units_dict = {"1":"one","2":"two","3":"three","4":"four","5":"five","6":"six","7":"seven","8":"eight","9":"nine"}
tens_dict = {"2":"twenty","3":"thirty","4":"forty","5":"fifty","6":"sixty","7":"seventy","8":"eighty","9":"ninety"}
teens_dict = {"10":"ten","11":"eleven","12":"twelve","13":"thirteen","14":"fourteen","15":"fifteen","16":"sixteen","17":"seventeen","18":"eighteen","19":"nineteen"}

def trave(number):
    output = []
    length_number = len(number)
    if length_number == 3:
        if number[0] != "0":
            temp = units_dict[number[0]]
            output.append(temp)
            output.append("hundred")
            if number[0]!="0":
                if number[1]!="0"&nbs***bsp;number[2]!="0":
                    output.append("and")
        number = number[1:]
        length_number -= 1
    if length_number == 2:
        if number[0] == "0":
            number = number[1:]
            length_number -= 1
        elif number[0] == "1":
            temp = teens_dict[number]
            output.append(temp)
        else:
            temp = tens_dict[number[0]]
            output.append(temp)
            number = number[1:]
            length_number -= 1
    if length_number == 1:
        if number[0] != "0":
            temp = units_dict[number[0]]
            output.append(temp)
    output = " ".join(output)
    return output
    
while True:
    try:
        '''
        number = input()
        number = number.split(",")
        length = len(number)
        output = ""
        '''
        inputs = int(input())
        number = []
        output = ""
        if inputs < 1000:
            number.append(str(inputs))
        elif 1000 < inputs < 1000000:
            temp = inputs // 1000
            number.append(str(temp))
            temp = inputs % 1000
            number.append(str(temp))
        elif inputs >= 1000000:
            temp = inputs // 1000000
            number.append(str(temp))
            inputs = inputs % 1000000
            temp = inputs // 1000
            number.append(str(temp))
            temp = inputs % 1000
            number.append(str(temp))
        length = len(number)
        
        if length == 3:
            temp = number[0]
            temp = trave(temp)
            output += temp
            output += " million "
            number = number[1:]
            length -= 1
        if length == 2:
            temp = number[0]
            temp = trave(temp)
            output += temp
            output += " thousand "
            number = number[1:]
            length -= 1
        if length == 1:
            temp = number[0]
            temp = trave(temp)
            output += temp
        
        print(output)
        
    except:
        break


发表于 2022-07-17 15:19:23 回复(0)
哎··难点其实是and和空格···最后还是换成了数组来避免乱七八糟的空格
a1 = input()
a1 = list(a1)
te = ['','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen']
se = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']
i = 0
a2 = []
while i<len(a1):
    if i==0:
        a2.append(a1[-3:])
    else:
        a2.append(a1[-i-3:-i])
    i += 3

a3 = []
for i in a2:
    num = int(''.join(i))
    bai = int(num / 100)
    shi = int((num - bai * 100) / 10)
    ge = int(num - bai * 100 - shi * 10)
    ge = te[ge]
    if ge == '':
        ge = []
    else:
        ge = [ge]
    if shi == 1:
        shi = ['and', te[num - bai * 100]]
    elif shi > 1:
        shi = ['and', se[shi - 2]] + ge
    else:
        if ge == []:
            shi = ge
        else:
            shi = ['and']+ge
    if bai == 0:
        try:
            shi.remove('and')
            yw = shi
        except:
            yw = shi
    else:
        yw = [te[bai], 'hundred'] + shi
    a3.append(yw)

if len(a3) == 3:
    pt = ' '.join(a3[2]) + ' million ' + ' '.join(a3[1]) + ' thousand ' + ' '.join(a3[0])
elif len(a3) == 2:
    pt = ' '.join(a3[1]) + ' thousand ' + ' '.join(a3[0])
else:
    pt = ' '.join(a3[0])
if pt[:3] == 'and':
    pt = pt[4:]
print(pt)



发表于 2022-07-02 17:05:42 回复(0)
#没用字典,用的列表,有些边界值额外处理了以下
def spk(number):  #每3位数分开处理
    list1 = ["","one","two","three","four","five","six","seven","eight","nine","ten"]
    list2 = ["","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"]
    list3 = ["","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]
    if number < 11:     #处理 1-10
        r = list1[number]
    elif 10 < number < 20:    #处理 11-19
        r = list2[number%10]
    elif 19 < number < 100:   #处理 20-99
        r = list3[number//10] + " " + list1[number%10]
    elif number == 100:      # 单独处理 100,用字典就没这么麻烦
        r = "one hundred"
    else:      #处理 101-999,方法和上面一样
        h = list1[number//100] + " hundred and"   
        if number%100 < 11:
            t = list1[number%100]
        elif 10 < number%100 < 20:
            t = list2[number%100%10] 
        elif 19 < number%100 < 100:
            t = list3[number%100//10] + " " + list1[number%100%10]
        r = h + " " + t     #把结果组合起来
    return r    #返回结果

while True:
    try:
        strs = input()
        if len(strs) < 4:    #只有3位的情况
            number = int(strs)
            res = spk(number)
            print(res)
        elif 3 < len(strs) < 7:    # 有4-6位的情况
            number = int(strs)//1000
            r1 = spk(number)
            number = int(strs)%1000
            r2 = spk(number)
            res = r1 + " thousand " + r2   #因为前面函数是每3位一组,现在组合结果
            res = res.replace("  "," ")    #因为用的前面列表,会有双空格的情况,额外处理
            print(res)
        elif 6 < len(strs) < 8:     #7位数的情况
            number = int(strs)//1000000
            r1 = spk(number)
            number = int(strs)%1000000//1000
            r2 = spk(number)
            number = int(strs)%1000000%1000
            r3 = spk(number)
            res = r1 + " million " + r2 + " thousand " + r3   #因为前面函数是每3位一组,现在组合结果         
            res = res.replace("  "," ")    #因为用的前面列表,会有双空格的情况,额外处理
            print(res)                
    except:
        break
#还是觉得很复杂,倒是挺好理解
发表于 2022-05-26 17:44:47 回复(0)
#个位
dic1={
    '0':"",'1':" one",'2':" two",'3':" three",
    '4':" four",'5':" five",'6':" six",
    '7':" seven",'8':" eight",'9':" nine",
}
#十位为一
dic2={
    '10':" ten",'11':" eleven",'12':" twelve",'13':" thirteen",
    '14':" fourteen",'15':" fifteen",'16':" sixteen",
    '17':" seventeen",'18':" eighteen",'19':" nineteen",
}
#十位不为一
dic3={
    '0':"",'2':" twenty",'3':" thirty",
    '4':" forty",'5':" fifty",'6':" sixty",
    '7':" seventy",'8':" eighty",'9':" ninety",
}

def hud(n):
    temp=''
    if n[0]=='0':
        if n[1]=='1':
            temp+=dic2[n[1:]]
        else:
            temp+=dic3[n[1]]+dic1[n[2]]
    else:
        temp+=dic1[n[0]]+' hundred'
        if n[1]=='0' and n[2]!='0':
            temp+=' and'+dic1[n[2]]
        elif n[1]=='0' and n[2]=='0':
            temp+=''
        elif n[1]=='1':
            temp+=' and'+dic2[n[1:]]
        else:
            temp+=' and'+dic3[n[1]]+dic1[n[2]]
    return temp

n=input().zfill(9)
temp2=''
unt=[' million',' thousand','']
for i in range(3):
    if n[3*i:3*i+3]!='000':
        temp2+=hud(n[3*i:3*i+3])+unt[i]
if temp2[0]==' ':
    temp2=temp2[1::]
print(temp2)


发表于 2022-05-22 20:45:24 回复(0)
while True:
    try:
        number = input()
    except:
        break
    length = len(number)
    stack = []
    i = length
    while i-3>=0:
        stack.append(number[i-3:i])
        i = i-3
    if i>0:
        stack.append(number[0:i])
    stack = stack[::-1]
    firstnumber = {'1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine'}
    secondnumber = {'1':'ten','2':'twenty','3':'thirty','4':'forty','5':'fifty','6':'sixty','7':'seventy','8':'eighty','9':'ninety'}
    specialnumber = {'00':'','01':'one','02':'two','03':'three','04':'four','05':'five','06':'six','07':'seven','08':'eight','09':'nine','10':'ten','11':'eleven','12':'twelve','13':'thirteen','14':'fourteen','15':'fifteen','16':'sixteen','17':'seventeen','18':'eighteen','19':'ninteen'}
    newstack = []
    for i in range(len(stack)):
        ele = stack[i]
        if ele[0] == '0':
            ele = ele[1::]
        newele = ''
        if len(ele) == 3:
            if ele[1::]!='00':
                newele += firstnumber[ele[0]]+' '+'hundred'+' '+'and'+' '
                if int(ele[1::])>=20:
                    newele += secondnumber[ele[1]]
                    if ele[-1] != '0':
                        newele += ' '+firstnumber[ele[-1]]
                else:
                    newele += specialnumber[ele[1::]]
            else:
                newele += firstnumber[ele[0]] + ' hundred'
        elif len(ele)==2:
            if int(ele)>=20:
                newele += secondnumber[ele[0]]
                if ele[-1] != '0':
                    newele += ' '+firstnumber[ele[-1]]
            else:
                newele += specialnumber[ele]
        elif len(ele) == 1:
            newele += firstnumber[ele[0]]
        newstack.append(newele)
    if len(newstack)==1:
        print(newstack[0])
    elif len(newstack)==2:
        print(' thousand '.join(newstack))
    elif len(newstack)==3:
        print(newstack[0]+' million '+newstack[1]+' thousand '+newstack[2])
        
        
        
                
        
       
发表于 2022-02-14 10:59:23 回复(0)
while True:
    try:
        a = input()
        res = []
        # preprocess
        while True:
            try:
                if a[0] == '0':
                    a = a[1:len(a)]
                else:
                    break
            except:
                break
        b = ''
        c = ''
        length = a.__len__()
        num = int(a)
        # print(length)
        if num > 2000000:
            exit()

        dic = {'0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', '5': 'five', '6': 'six', '7': 'seven',
               '8': 'eight', '9': 'nine', '10': 'ten'
            , '11': 'eleven', '12': 'twelve', '13': 'thirteen', '14': 'fourteen', '15': 'fifteen', '16': 'sixteen',
               '17': 'seventeen', '18': 'eighteen'
            , '19': 'nineteen', '20': 'twenty', '30': 'thirty', '40': 'forty', '50': 'fifty', '60': 'sixty',
               '70': 'seventy', '80': 'eighty', '90': 'ninety'
               }


        def readlast2word(w):
            b = w[-2] + w[-1]
            if w[-2] == '0':
                b = w[-1]
            if int(b) <= (20) or w[-1] == '0':
                res.append(dic[b])
            else:
                b = w[-2] + '0'
                res.append(dic[b])
                res.append(dic[w[-1]])


        def readhundred(w):
            if w != '0':
                res.append(dic[w])
                res.append('hundred')


        # print(a[length-i-1])

        if length == 1:
            res.append(dic[a[0]])
        elif length == 2:
            readlast2word(a)
        if length > 2:
            if length == 7:
                c = '0' + a[-7]
                readlast2word(c)
                res.append('million')
                length -= 1
            if length == 6:
                c = ''
                c = c + a[-5] + a[-4]
                if a[-6] != '0':
                    readhundred(a[-6])
                    if c != '00':
                        res.append('and')
                if c != '00':
                    readlast2word(c)
                if c + a[-6] != '000':
                    res.append('thousand')
            if length == 5:
                c = c + a[-5] + a[-4]
                readlast2word(c)
                res.append('thousand')
            if length == 4:
                res.append(dic[a[-4]])
                res.append('thousand')
            if a[-3] != '0':
                readhundred(a[-3])
            if a[-2] != '0' or a[-1] != '0':
                if a[-3] != '0':
                    res.append('and')
                readlast2word(a)

        print(" ".join(res))
        continue
        # print(length-i-1,'位')
        # length -= 1
    except:
        break
发表于 2022-01-13 10:35:14 回复(0)
s = ['','one','two','three','four','five','six','seven',
     'eight','nine','ten','eleven','twelve','thirteen',
     'fourteen','fifteen','sixteen','seventeen','eighteen',
     'nineteen','twenty','thirty','forty','fifty','sixty',
     'seventy','eighty','ninety'
     ]

def s_1(st):
    res = s[int(st)]
    return res

def s_2(st):
    num = int(st)
    if num < 20:
        res = s[int(st)]
    else:
        n1 = num % 10
        n2 = num // 10
        if n1 == 0:
            res = s[n2 + 18]
        else:
            res = s[n2 + 18] + ' ' + s_1(str(n1))
    return res
            
def s_3(st):
    if len(st) <= 2:
        return s_2(st)
    
    n3 = int(st[0])
    mod = int(st) % 100
    if mod == 0:
        res = s[n3] + ' ' + 'hundred'
    else:
        res = s[n3] + ' ' + 'hundred' + ' and ' + s_2(st[1:])
    return res

def s_4(st):
    if len(st) <= 3:
        return s_3(st)
    n1 = str(int(st[-3:]))
    n2 = str(int(st[:-3]))
    res = s_3(n2) + ' thousand ' + s_3(n1)
    return res

def s_5(st):
    if len(st) <= 6:
        return s_4(st)
    n1 = str(int(st[-6:]))
    n2 = str(int(st[:-6]))
    res = s_4(n2) + ' million ' + s_4(n1)
    return res

def s_6(st):
    if len(st) <= 9:
        return s_5(st)
    n1 = str(int(st[-9:]))
    n2 = str(int(st[:-9]))
    res = s_5(n2) + ' billion ' + s_5(n1)
    return res
    
while True:
    try:
        st = input()
        print(s_6(st))
    except:
        break

发表于 2021-11-19 16:38:49 回复(0)

while 1:
try:
num=int(input())
num1={1:'one',2:'two',3:'three',4:'four',5:'five',6:'six',7:'seven',8:'eight',9:'nine',10:'ten',11:'eleven',
12:'twelve',13:'thirteen',14:'fourteen',15:'fifteen',16:'sixteen',17:'seventeen',18:'eighteen',19:'nineteen'}
num2={20:'twenty',30:'thirty',40:'forty',50:'fifty',60:'sixty',70:'seventy',80:'eighty',90:'ninety'}
def num_1(num): #0-20
if num>0:
return num1[num]
else:
return ''
def num_2(num): #20-100
if num%10==0:
return num2[num]
else:
return num2[num-num%10]+' '+num1[num%10]
def num_3(num): #100-1000
a,b=num//100,num%100
if b>19:
return num1[a]+' hundred and '+num_2(b)
elif b>0:
return num1[a]+' hundred and '+num_1(b)
else:
return num1[a]+' hundred'
def num_4(num): #>=1000分段读
if num>=100:
return num_3(num)
elif num>=20:
return num_2(num)
elif num>=1:
return num_1(num)
else:
return ''
a,b,c=num//1000000,(num%1000000)//1000,(num%1000000)%1000
if a>0:
if b==0:
print(num_4(a)+' million '+num_4(c))
else:
print(num_4(a)+' million '+num_4(b)+' thousand '+num_4(c))
elif a==0 and b>0:
print(num_4(b)+' thousand '+num_4(c))
else:
print(num_4(num))
except:
break

发表于 2021-11-11 22:27:18 回复(0)
def words(n):
    if n < 20:
        result = str1[n-1:n]
        return result
    elif n <100:
        result = [str2[n//10]] + words(n%10)
        return result
    elif n <1000:
        if n%100 == 0:
            result = [str1[n//100-1]] +["hundred"]
            return result
        else:
            result = [str1[n//100-1]] +["hundred"]+["and"]+ words(n%100)
            return result
    for p,w in enumerate(('thousand',"million","billion"),1):
        if n<1000**(p+1):
            result = words(n//1000**p)+[w]+words(n%1000**p)
            return result
            
try:
    while True:
        str1 = 'one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen'.split()
        str2 = '0 ten twenty thirty forty fifty sixty seventy eighty ninety'.split()
        n = int(input())
        if n == 0:
            print('zero')
        else:
            print(' '.join(words(n)))
except:
    pass

为什么try 和 while True交换后,运行时间就超过2s
发表于 2021-10-31 19:25:06 回复(0)
这就让人很受伤。

发表于 2021-09-18 15:51:34 回复(1)