Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
For example,
123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
题目链接:https://leetcode.com/problems/integer-to-english-words/
题目分析:以Thousand,Million,Billion为分割点,三位三位的去处理,注意0的特殊情况
public class Solution {
final String[] units = {"Zero", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "};
final String[] tens1 = {"Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "};
final String[] tensn = {"", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "};
final String[] base = {"Hundred ", "Thousand ", "Million ", "Billion "};
final int Billion = 1000000000;
final int Million = 1000000;
final int Thousand = 1000;
final int Hundred = 100;
final int Ten = 10;
//处理十位数
public String TNumToWords(int num) {
StringBuffer ans = new StringBuffer("");
if(num / Ten == 1) {
ans.append(tens1[num - Ten]);
}
else {
ans.append(tensn[num / Ten]);
if(num % Ten != 0) {
ans.append(units[num % Ten]);
}
}
return ans.toString();
}
//处理百位数
public String HNumToWords(int num) {
StringBuffer ans = new StringBuffer("");
int H = num / Hundred;
if(H < Ten) {
ans.append(units[H]);
ans.append(base[0]);
}
else if(H < Hundred) {
ans.append(TNumToWords(H));
ans.append(base[0]);
}
ans.append(TNumToWords(num % Hundred));
return ans.toString();
}
//判断是个位十位还是百位数
public String getType(int num) {
StringBuffer ans = new StringBuffer("");
if(num < Ten) {
ans.append(units[num]);
}
else if(num < Hundred) {
ans.append(TNumToWords(num));
}
else {
ans.append(HNumToWords(num));
}
return ans.toString();
}
public String numberToWords(int num) {
StringBuffer ans = new StringBuffer("");
if(num == 0) {
ans.append(units[0]);
return ans.toString();
}
if(num / Billion != 0) {
ans.append(getType(num / Billion));
ans.append(base[3]);
num %= Billion;
}
if(num / Million != 0) {
ans.append(getType(num / Million));
ans.append(base[2]);
num %= Million;
}
if(num / Thousand != 0) {
ans.append(getType(num / Thousand));
ans.append(base[1]);
num %= Thousand;
}
if(num != 0) {
ans.append(getType(num));
}
ans.deleteCharAt(ans.length() - 1);
return ans.toString();
}
}