-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInteger to English Words.py
97 lines (92 loc) · 3.42 KB
/
Integer to English Words.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# class Solution(object):
# def numberToWords(self, num):
# """
# :type num: int
# :rtype: str
# """
# def treeDigits(num):
# ret = []
# if num / 100:
# ret.append(lookup[num / 100])
# ret.append("Hundred")
# if num % 100:
# ret.append(twoDigits(num % 100))
# return " ".join(ret)
# def twoDigits(num):
# if num in lookup:
# return lookup[num]
# else:
# return lookup[num - num % 10] + " " + lookup[num % 10]
# lookup = {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"}
# unit = ["", "Thousand", "Million", "Billion"]
# ret = []
# tag = 0
# if num == 0:
# return lookup[num]
# while num:
# left = num % 1000
# word = treeDigits(left)
# if word and tag:
# word += " " + unit[tag]
# if word:
# ret.append(word)
# num /= 1000
# tag += 1
# return " ".join(ret[::-1])
class Solution(object):
def numberToWords(self, num):
"""
:type num: int
:rtype: str
"""
def twoDigits(number, ans):
if number in DIGITS: ## 0 - 9/10/20/.../90
ans.append(DIGITS[number])
return
ans.append(DIGITS[number - number % 10])
ans.append(DIGITS[number % 10])
return
def threeDigtis(number, ans):
if number == 0:
return
if number >= 100:
twoDigits(number / 100, ans)
ans.append('Hundred')
if number % 100 > 0:
twoDigits(number % 100, ans)
# return
else:
twoDigits(number, ans)
# return
DIGITS = {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"}
THUS = ["", "Thousand", "Million", "Billion"]
if num == 0:
return "Zero"
index = 0
tmp = num
while tmp >= 1000:
index += 1
tmp /= 1000
if index > 3:
raise Exception('invalid')
ans = []
tmp = num
while index >= 0:
number = tmp / (1000 ** index)
if number > 0:
threeDigtis(number, ans)
if index != 0:
ans.append(THUS[index])
tmp %= (1000 ** index)
index -= 1
return ' '.join(ans)