# 273. Integer to English Words

## 1. Question

Convert a non-negative integer num to its English words representation.

## 2. Examples

Example 1:

Input: num = 123
Output: "One Hundred Twenty Three"


Example 2:

Input: num = 12345
Output: "Twelve Thousand Three Hundred Forty Five"


Example 3:

Input: num = 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"


Example 4:

Input: num = 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"


## 3. Constraints

• 0 <= num <= 231 - 1

## 5. Solutions

class Solution {

static String[] small = {
"Zero", "One", "Two", "Three", "Four", "Five",
"Six", "Seven", "Eight", "Nine", "Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen",
"Sixteen", "Seventeen", "Eighteen", "Nineteen"
};
static String[] medium = {
"", "", "Twenty", "Thirty", "Forty", "Fifty",
"Sixty", "Seventy", "Eighty", "Ninety"
};
static String[] large = {
"", "Thousand", "Million", "Billion"
};

private StringBuilder num2Str(int x) {
StringBuilder sb = new StringBuilder();
if (x >= 100) {
sb.append(small[x / 100]).append(" Hundred").append(" ");
x %= 100;
}
if(x >= 20) {
sb.append(medium[x / 10]).append(" ");
x %= 10;
}
if (x != 0) {
sb.append(small[x]).append(" ");
}
return sb;
}

public String numberToWords(int num) {
if (num == 0) {
return small[num];
}
StringBuffer sb = new StringBuffer();
int count = 0;
while (num != 0) {
int k = num % 1000;

if (k != 0) {
StringBuilder s = num2Str(k);
s.append(large[count]).append(" ");
sb.insert(0, s);
}

count++;
num /= 1000;
}
return sb.toString().trim();
}
}

Copyright © rootwhois.cn 2021-2022 all right reserved，powered by GitbookFile Modify: 2023-03-05 10:55:51