题解 | #学英语#
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
""" 阿拉伯数字转英文数字 具体规则如下: 1.在英语读法中三位数字看成一整体,后面再加一个计数单位。从最右边往左数,三位一单位,例如12,345 等 2.每三位数后记得带上计数单位 分别是thousand, million, billion. 3.公式:百万以下千以上的数 X thousand X, 10亿以下百万以上的数:X million X thousand X, 10 亿以上的数:X billion X million X thousand X. 每个X分别代表三位数或两位数或一位数。 4.在英式英语中百位数和十位数之间要加and,美式英语中则会省略,我们这个题目采用加上and,百分位为零的话,这道题目我们省略and 下面再看几个数字例句: 22: twenty two 100: one hundred 145: one hundred and forty five 1,234: one thousand two hundred and thirty four 8,088: eight thousand (and) eighty eight (注:这个and可加可不加,这个题目我们选择不加) 486,669: four hundred and eighty six thousand six hundred and sixty nine 1,652,510: one million six hundred and fifty two thousand five hundred and ten """ w1 = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", ] w2 = [ "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", ] def tran(d): """阿拉伯正整数to英文正整数""" if d < 20: r = w1[d] elif 20 <= d <= 99: r = w2[d // 10] if d % 10: # 避免 fifty zero r += " " + w1[d % 10] elif 100 <= d <= 999: r = w1[d // 100] + " hundred" if d % 100: r += " and " + tran(d % 100) elif 1000 <= d < 10 ** 6: r = tran(d // 1000) + " thousand" if d % 1000: r += " " + tran(d % 1000) elif 10 ** 6 <= d < 10 ** 9: r = tran(d // 10 ** 6) + " million" if d % 10 ** 6: r += " " + tran(d % 10 ** 6) elif 10 ** 9 <= d < 10 ** 12: r = tran(d // 10 ** 9) + " billion" if d % 10 ** 9: r += " " + tran(d % 10 ** 9) return r if __name__ == "__main__": # while True: n = int(input()) print(tran(n))