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"
Hint:
1 public class Solution { 2 public String numberToWords(int num) { 3 if (num == 0) return "Zero"; 4 String[] big= {"", "Thousand", "Million", "Billion"}; 5 String[] small = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; 6 String[] tens = {"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; 7 String[] ones = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; 8 StringBuilder res = new StringBuilder(); 9 int count = 0; 10 while (num != 0) { 11 int cur = num % 1000; 12 int o = cur % 10, t = (cur / 10) % 10, h = cur / 100; 13 StringBuilder tmp = new StringBuilder(); 14 if (h != 0) tmp.append(ones[h] + " Hundred "); 15 if (t == 1) tmp.append(small[o] + " "); 16 else { 17 if (t > 1) tmp.append(tens[t-2] + " "); 18 if (o > 0) tmp.append(ones[o] + " "); 19 } 20 if(tmp.length() != 0) tmp.append(big[count] + " "); 21 res.insert(0, tmp); 22 num /= 1000; 23 count++; 24 } 25 return res.toString().trim(); 26 } 27 }
https://leetcode.com/discuss/60010/share-my-clean-java-solution
原文:http://www.cnblogs.com/hygeia/p/4900111.html