273-整数转换英文表示

将非负整数 num 转换为其对应的英文表示

输入:num = 123
输出:"One Hundred Twenty Three"

输入:num = 12345
输出:"Twelve Thousand Three Hundred Forty Five"

输入:num = 1234567
输出:"One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

输入:num = 1234567891
输出:"One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"

class Solution {
    String[] low = {"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
     String[] mid = {"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen",  
                        "Seventeen", "Eighteen","Nineteen"};
     String[] high = {"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"}; 

     public String numberToWords(int num) {
         if(num == 0){
             return "Zero";
            } 
         //三位数三位数划分
         int part1 = num % 1000;
         num = num / 1000;
         int part2 = num % 1000;
         num = num / 1000;
         int part3 = num % 1000;
         num = num / 1000;
         int part4 = num;

         //StringBuilder提高效率,注意空格的填充
         StringBuilder ans = new StringBuilder();
         if(part4 != 0){//百万
             ans.append(builderNumber(part4)).append(" ").append("Billion");
         }
         if(part3 != 0){//十万
             ans.append(" ").append(builderNumber(part3)).append(" ").append("Million");
         }
         if(part2 != 0){//千
             ans.append(" ").append(builderNumber(part2)).append(" ").append("Thousand");
         }
         if(part1 != 0){//千以下
             ans.append(" ").append(builderNumber(part1));
         }
         return ans.toString().trim();//头尾去空
    }
    public String builderNumber(int num){
        //千位以下的判断
        int a = num % 10;
        num = num / 10;
        int b = num % 10;//十位
        num = num / 10;
        int c = num;//百位
        StringBuilder ans = new StringBuilder();
        if(c != 0){//百位不为0,添加百
            ans.append(low[c]).append(" ").append("Hundred");
        } 
        if(b == 1){//特殊情况,十几在中部寻找
            ans.append(" ").append(mid[a]);
        }else if(b == 0){//各位数字,在低部寻找
            ans.append(" ").append(low[a]);
        }else{//其他情况
            ans.append(" ").append(high[b]).append(" ").append(low[a]);
        }
        return ans.toString().trim();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值