栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

十亿以下整数转换英文(java实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

十亿以下整数转换英文(java实现)

273. 整数转换英文表示

​ 使用了模拟的方法,最多10位 从左边开始 1-3位为百位处理模块 4-6 位为千位处理 7位为百万位处理在这里我发现了规律,每一段都需要处理一个 百位数,那么问题就缩小到翻译 1-999 和拼接字符串的问题了。

​ 这道题考察工业代码的开发能力。拆解成多个子方法开发就会简编很多。我使用basicNum()方法为内核,其余问题就变成了简单的字符串拼接。

1025666
输出
"One Million Twenty Five Thousand Six Hundred Sixty Six"
预期结果
"One Million Twenty Five Thousand Six Hundred Sixty Six"

执行用时:2 ms, 在所有 Java 提交中击败了92.33%的用户

内存消耗:37.8 MB, 在所有 Java 提交中击败了60.00%的用户

class Solution {

    

    
    
    String[] ten_strs = {"Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};//9
    String[] twenty_strs = {"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};//10
    String[] ninety_strs = {"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};//8

    final int billion = 1000000000;
    final int million = 1000000;
    final int thousand = 1000;
    StringBuilder sb;

    public String numberToWords(int num) {
        sb = new StringBuilder();

        if(num >= billion){
            sb.append(billion_part(num));
        }

        if(num>=million){
            String million_part= million_part(num);
            if(!million_part.equals("")&&sb.toString().length()!=0) sb.append(" ");
            sb.append(million_part);
        }


        if(num>=thousand){
            String thousand_part=thousand_part(num);

            if(!thousand_part.equals("")&&sb.toString().length()!=0) sb.append(" ");
            sb.append(thousand_part);
            
        }




        
        //处理千位以下的数
        
        String hundred_str = basicNum(num);

        // &&!hundred_str.equals("Zero")
        if(!hundred_str.equals("")){
            if(hundred_str.equals("Zero")&&sb.toString().length()!=0){
                
            }else{
                if(sb.toString().length()!=0&&!hundred_str.equals(" ")) sb.append(" ");
                sb.append(hundred_str);
            }

           
        }
        //if(sb.length()>0&&sb.toString().charAt(sb.length()-1)!=' ')sb.deleteCharAt(sb.length()-1);

        return sb.toString();
        

    }
    public String billion_part(int num){
        num = num/billion;
        StringBuilder sb = new StringBuilder();
        sb.append(basicNum(num));
        sb.append(" ");
        sb.append("Billion");
        return sb.toString();

    }
//  百万级处理方法  为什么1000010会出现额外的空格
    public String million_part(int num){
        num = (num%billion)/million;
        StringBuilder sb = new StringBuilder();
        if(num!=0){
            sb.append(basicNum(num));
            sb.append(" ");
            sb.append("Million");
        }
        
        return sb.toString();

    }

    public String thousand_part(int num){
        num = (num%million)/1000;
        
        StringBuilder sb = new StringBuilder();
        if(num!=0){
            sb.append(basicNum(num));
            sb.append(" ");
            sb.append("Thousand");
        }
        

        return sb.toString();

    }










    public String basicNum(int num){
        if(num == 0) return "Zero"; 
        num = num%1000;
        if(num == 0) return "";
        // 边界条件
        if(num == 0&&this.sb.toString().length()==0) return "Zero";
        if(num<10) return ten_strs[num];
        //Hundred
        StringBuilder sb= new StringBuilder();
        int high = num/100;
        if(high!=0){
            sb.append(ten_strs[high]);
            sb.append(" ");
            sb.append("Hundred");
        }
        // mid代表了十 位
        int mid = (num%100)/10;
        // low 代表了个位
        int low = (num%100)%10;

        //当 20<=num<=99 时 应该调用 20-90 并且加上 1-9
        if(mid!=1&&mid!=0){
//  这里出现了符号问题 “ ”            
            if(sb.toString().length()!=0){
                sb.append(" ");
            }
                sb.append(ninety_strs[mid-2]);
            
           
            if(low!=0){
                if(sb.toString().length()!=0)sb.append(" ");
                sb.append(ten_strs[low]);
            }
            
        }else if(mid==1){ //范围在10-19 
            if(sb.toString().length()!=0)sb.append(" ");
            sb.append(twenty_strs[low]);

        }else if(mid ==0&& low!=0){ //范围在1到 9
            String lastnum = ten_strs[low];
            if(!lastnum.equals("Zero")){
                if(sb.toString().length()!=0)sb.append(" ");
                sb.append(ten_strs[low]);
            }

            

        }

        return sb.toString();




    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号