Here I use a helper function `trans`

to transform the integer under 1000 into its English format. Then, all I need is to split `num`

into parts by every 4 digits and call `trans`

for each part. Of course we need to add the corresponding suffix in `C`

for each `trans`

we called.

```
class Solution(object):
def numberToWords(self, num):
"""
:type num: int
:rtype: str
"""
A = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", \
"Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", \
"Sixteen", "Seventeen", "Eighteen", "Nineteen"]
B = ["Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
C = ["Billion", "Million", "Thousand"]
def trans(n):
return [] if not n else [A[n // 100], "Hundred"] + trans(n%100) if n >= 100 \
else [A[n]] if n < 20 else [B[(n//10)-2]] + trans(n%10)
res, N = [], [10**9, 10**6, 1000, 1]
for i in range(4):
digit, num = divmod(num, N[i])
if digit: res += trans(digit) + C[i:i+1]
return " ".join(res) or "Zero"
```