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(); } }
时间: 2024-10-12 02:30:33