JAVA程序设计:整数转换英文表示(LeetCode:273)

将非负整数转换为其对应的英文表示。可以保证给定输入小于 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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值