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"A:
就是递归调用
public class Solution {
public static String[] Tens = {"Ten","Twenty","Thirty","Forty", "Fifty","Sixty","Seventy","Eighty","Ninety"};
public static String[] Teens = {"Eleven","Twelve","Thirteen","Fourteen", "Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
public static String[] Ones = {"One","Two", "Three","Four","Five","Six","Seven","Eight","Nine"};
public String numberToWords(int num) {
if(num==0)
return "Zero";
return helper(num).trim();
}
private String helper(int num){
if((int)(num / Math.pow(10,9)) > 0){
return helper((int)(num/Math.pow(10,9)))+"Billion " + helper((int)(num % Math.pow(10,9)));
}
if((int)(num / Math.pow(10,6)) > 0){
return helper((int)(num/Math.pow(10,6)))+"Million " + helper((int)(num % Math.pow(10,6)));
}
if(num/1000 > 0){
return helper(num/1000)+"Thousand " + helper(num % 1000);
}
if(num / 100 > 0){
return helper(num/100)+"Hundred " + helper(num % 100);
}
if(num>10 && num< 20)
return Teens[num-11] +" ";
if(num/10>0){
return Tens[num/10-1] + " " +helper(num % 10);
}
if(num>0)
return Ones[num-1]+" ";
return "";
}
}
Mistakes:- 用 num / Math.pow(10,9)的时候, 结果是double类型的,因此,作为参数传递的时候,会有报错。double to int
- 没有考虑 11- 19的情况。
- 90 是“ninety”, 而不是“ninty”. 19 是 ”nineteen“ 而不是”ninteen“。 丢人啊
No comments:
Post a Comment