-
Notifications
You must be signed in to change notification settings - Fork 0
/
IntegerToEnglishWords.java
66 lines (55 loc) · 2.23 KB
/
IntegerToEnglishWords.java
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
public class IntegerToEnglishWords {
/**
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
Example 1:
Input: 123
Output: "One Hundred Twenty Three"
Example 2:
Input: 12345
Output: "Twelve Thousand Three Hundred Forty Five"
Example 3:
Input: 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
Example 4:
Input: 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety
*/
public static String numberToWords(int num) {
if (num == 0) return "Zero";
String[] threeZeros = new String[]{"", "Thousand ", "Million ", "Billion "};
StringBuilder res = new StringBuilder();
int i = 3;
int divider = 1000000000;
while (divider >= 1) {
if (num / divider != 0) {
res.append(hundredsToWords((num / divider)));
res.append(threeZeros[i]);
num = num % divider;
}
divider /= 1000;
i--;
}
return res.toString().trim();
}
private static String hundredsToWords(int num) {
String[] numbers = new String[]{"Zero ", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen ", "Twenty "};
String[] tens = new String[]{"Zero ", "Ten ", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "};
StringBuilder sb = new StringBuilder();
if (num / 100 != 0) {
sb.append(numbers[num / 100]);
sb.append("Hundred ");
}
num %= 100;
if (num < 20 && num > 0) {
sb.append(numbers[num]);
} else if (num >= 20) {
sb.append(tens[num / 10]);
if (num % 10 != 0)
sb.append(numbers[num % 10]);
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(numberToWords(20));
}
}