将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。
示例 1:
输入: 123
输出: "One Hundred Twenty Three"
示例 2:
输入: 12345
输出: "Twelve Thousand Three Hundred Forty Five"
示例 3:
输入: 1234567
输出: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
示例 4:
输入: 1234567891
输出: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
思路:本辣鸡用一位一位枚举所有情况搞得,wa了有20多发,终于过了(微笑)
class Solution {
int[] a=new int[] {0,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
String[] s1=new String[] {"Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
String[] s2=new String[] {"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
String[] s3=new String[] {"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
String[] s4=new String[] {"Hundred","Thousand","Million","Billion"};
public String numberToWords(int num) {
if(num<10) return s1[num];
int len=0,sum=num;
while(sum>0)
{
len++;
sum/=10;
}
StringBuilder ans=new StringBuilder();
len--;
while(len>0)
{
System.out.printf("%d\n", len);
int tmp=num/a[len]%10;
if(tmp==0) { len--; continue; }
if(len==1)
{
if(tmp==1) { ans.append(s2[num%10]); len-=2; }
else {ans.append(s3[tmp]);len--;}
}
else if(len==2) { ans.append(s1[tmp]+" "+s4[0]);len--; }
else if(len==3) {ans.append(s1[tmp]+" "+s4[1]);len--;}
else if(len==4)
{
if(tmp==1) { ans.append(s2[num/(a[len-1])%10]+" "+s4[1]); len-=2; }
else
{
ans.append(s3[tmp]);
len--;
if(num/a[len]%10==0)
ans.append(" "+s4[1]);
}
}
else if(len==5)
{
ans.append(s1[tmp]+" "+s4[0]);
len--;
if(num/1000%100==0)
ans.append(" "+s4[1]);
}
else if(len==6) {ans.append(s1[tmp]+" "+s4[2]);len--; }
else if(len==7)
{
if(tmp==1) {ans.append(s2[num/(a[len-1])%10]+" "+s4[2]);len-=2; }
else
{
ans.append(s3[tmp]);
len--;
if(num/a[len]%10==0)
ans.append(" "+s4[2]);
}
}
else if(len==8)
{
ans.append(s1[tmp]+" "+s4[0]);
len--;
if(num/1000000%100==0)
ans.append(" "+s4[2]);
}
else if(len==9) {ans.append(s1[tmp]+" "+s4[3]);len--;}
ans.append(' ');
}
if(len==0 && num%10!=0) ans.append(s1[num%10]);
else ans.deleteCharAt(ans.length()-1);
return ans.toString();
}
}