leetcode 面试题 16.08.整数的英语表示

原题如下

https://leetcode-cn.com/problems/english-int-lcci/
在这里插入图片描述

题解

/*
 *@v7fgg
 *执行用时 :17 ms, 在所有 Java 提交中击败了27.86%的用户
 *内存消耗 :39.8 MB, 在所有 Java 提交中击败了100.00%的户
 *2020年6月18日 22:24
 */
class Solution {
    public String numberToWords(int num) {
        //考虑特殊情况的0
        if(num==0){return "Zero";}
        String ans="";
        //原数字在后面还要用到,因此复制一份,这里只需要考虑绝对值
        int m=Math.abs(num);
        int yi=m%1000;//1000以内的值,也就是后三位
        int qian=m/1000%1000;//多少千thousand
        int baiwan=m/1000000%1000;//多少百万million
        int shiyi=m/1000000000;//多少十亿billion
        if(yi>0){
            ans=in1000(yi);
        }
        if(qian>0){
            ans=in1000(qian)+" Thousand "+ans;
        }
        if(baiwan>0){
            ans=in1000(baiwan)+" Million "+ans;
        }
        if(shiyi>0){
            ans=in1000(shiyi)+" Billion "+ans;
        }
        //考虑负数的情况
        if(num<0){ans="Negative "+ans;}
        return ans.trim();
    }
    public String in1000(int a){
        //此函数是把一个1000以内的数字变成字符串
        String shuzi1[]=new String[]{"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
        String shuzi2[]=new String[]{"","Ten","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
        String r="";
        if(a%100<20){
            r=shuzi1[a%100];
            a/=100;
        }
        else{
            r=shuzi1[a%10];
            a/=10;
            if(a>0){
                //要去掉空格,因为会出现比如:3000000 thirty thousand
                r=(shuzi2[a%10]+" "+r).trim();
                a/=10;
            }
        }
        if(a>0){
            //去空格是因为会出现比如:100000 one hundred thousand
            r=(shuzi1[a]+" Hundred "+r).trim();
        }
        return r;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值