Problem
Convert a non-negative integer num to its English words representation.
Algorithm
Three consecutive digit make one group. Simulation processing will suffice and specifically deal the number less than 20.
Code
python3
class Solution:
def numberToWords(self, num: int) -> str:
def units(num):
if 1 == num: return "One"
elif 2 == num: return "Two"
elif 3 == num: return "Three"
elif 4 == num: return "Four"
elif 5 == num: return "Five"
elif 6 == num: return "Six"
elif 7 == num: return "Seven"
elif 8 == num: return "Eight"
elif 9 == num: return "Nine"
elif 10 == num: return "Ten"
elif 11 == num: return "Eleven"
elif 12 == num: return "Twelve"
elif 13 == num: return "Thirteen"
elif 14 == num: return "Fourteen"
elif 15 == num: return "Fifteen"
elif 16 == num: return "Sixteen"
elif 17 == num: return "Seventeen"
elif 18 == num: return "Eighteen"
elif 19 == num: return "Nineteen"
return ""
def tens(num):
if 2 == num: return "Twenty"
elif 3 == num: return "Thirty"
elif 4 == num: return "Forty"
elif 5 == num: return "Fifty"
elif 6 == num: return "Sixty"
elif 7 == num: return "Seventy"
elif 8 == num: return "Eighty"
elif 9 == num: return "Ninety"
return ""
def two_digit(num):
if num < 20:
return units(num)
else:
ans = tens(num // 10)
num = num - num // 10 * 10
if num > 0:
ans += " " + units(num - num // 10 * 10)
return ans
def three_digit(num):
ans = ""
if num >= 100:
ans += units(num // 100) + " Hundred"
num = num - num // 100 * 100
if num > 0:
if ans != "": ans += " "
ans += two_digit(num)
return ans
if 0 == num:
return "Zero"
ans = ""
if num >= 1000000000:
ans += three_digit(num // 1000000000) + " Billion"
num = num - num // 1000000000 * 1000000000
if num >= 1000000:
if ans != "": ans += " "
ans += three_digit(num // 1000000) + " Million"
num = num - num // 1000000 * 1000000
if num >= 1000:
if ans != "": ans += " "
ans += three_digit(num // 1000) + " Thousand"
num = num - num // 1000 * 1000
if num > 0:
if ans != "": ans += " "
ans += three_digit(num)
return ans