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:
Just as hint described, handle 3digit at each time, convert them into English word,
every time handle 3 digit, the unit will increase.
So many corner cases need to handle.
public String numberToWords(int num) { String[] units = {""," Thousand"," Million"," Billion"}; int i = 0; String res=""; while(num>0) { int temp = num%1000; if(temp>0) res = convert(temp) + units[i] + (res.length()==0 ?"": " "+res); num /= 1000; i++; } return res.isEmpty()? "Zero" : res; } public String convert(int num){ String res = ""; String[] ten = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; String[] hundred = {"Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; String[] twenty = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; if(num>0) { int temp = num/100; if(temp>0) { res += ten[temp] + " Hundred"; } temp = num%100; if(temp>=10 && temp<20){ if(!res.isEmpty()) res +=" "; res = res + twenty[temp%10]; return res; }else if(temp>=20){ temp = temp/10; if(!res.isEmpty()) res +=" "; res = res + hundred[temp-1]; } temp = num%10; if(temp>0) { if(!res.isEmpty()) res +=" "; res = res + ten[temp]; } } return res; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
[LeetCode 273] Integer to English Word
原文地址:http://blog.csdn.net/sbitswc/article/details/48540685