题目
解法:
建议直接看lc官网:https://leetcode.com/problems/integer-to-english-words/
class Solution:
def numberToWords(self, num: int) -> str:
# 2^31 = 2 147 483 648
def one(num):
switcher = {
1: 'One',
2: 'Two',
3: 'Three',
4: 'Four',
5: 'Five',
6: 'Six',
7: 'Seven',
8: 'Eight',
9: 'Nine'
}
return switcher.get(num)
def two_less_20(num):
switcher = {
10: 'Ten',
11: 'Eleven',
12: 'Twelve',
13: 'Thirteen',
14: 'Fourteen',
15: 'Fifteen',
16: 'Sixteen',
17: 'Seventeen',
18: 'Eighteen',
19: 'Nineteen'
}
return switcher.get(num)
def ten(num):
switcher = {
2: 'Twenty',
3: 'Thirty',
4: 'Forty',
5: 'Fifty',
6: 'Sixty',
7: 'Seventy',
8: 'Eighty',
9: 'Ninety'
}
return switcher.get(num)
def two(num):
if not num:
return ''
if num<10:
return one(num)
if num<20:
return two_less_20(num)
else:
tenner = num//10
rest = num - tenner*10
return ten(tenner)+ ' ' +one(rest) if rest else ten(tenner)
def three(num):
hundred = num//100
rest = num - hundred*100
if hundred and rest:
return one(hundred) + ' Hundred ' + two(rest)
elif not hundred and rest:
return two(rest)
elif hundred and not rest:
return one(hundred) + ' Hundred'
if not num:
return 'Zero'
billon = num//1000000000
millon = (num-billon*1000000000)//1000000
thousand = (num-billon*1000000000-millon*1000000)//1000
rest = num-billon*1000000000-millon*1000000-thousand*1000
result = ''
if billon:
result += three(billon) + ' Billion'
if millon:
result += ' ' if result else ''
result += three(millon) + ' Million'
if thousand:
result += ' ' if result else ''
result += three(thousand) + ' Thousand'
if rest:
result += ' ' if result else ''
result += three(rest)
return result