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”
读法就是仿效123,456,789每次三个数这样的读。我们一开始将可能用到的所有的单词都存储起来。而且这道题目不需要and了。这样就简单很多了。注意要处理“000”这样的时候。
代码如下:

class Solution {
    private:
    string units[11] = {""," Thousand"," Million"," Billion"};
    string num0To9[11] = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
    string num10To19[11] = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
    string num10To90[11] = {"Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
    public:
    string fcs(int num)
    {
        if(num==0) return "";
        else if(num>=1&&num<=9) return num0To9[num];
        else if(num>=10&&num<=19) return num10To19[num-10];
        else if(num>=20&&num<=99)
        {
            if(num%10==0) return num10To90[num/10-1];
            else return num10To90[num/10-1]+" "+num0To9[num%10];
        }
        else{//三位数的情况
            string ans="";
            if(num%100==0) return num0To9[num/100]+" Hundred";
            else return num0To9[num/100]+" Hundred "+fcs(num%100);
        }
    }
    string numberToWords(int num) {
        if(num==0) return "Zero";
        else if(num>=1&&num<=9) return num0To9[num];
        else if(num>=10&&num<=19) return num10To19[num-10];
        else{
            string ans="";
            int cnt=0;
            while(num)
            {
                string ss=units[cnt];
                string temp=fcs(num%1000);
                if(temp=="") ss="";//num%1000==0的情况
                else temp=temp+ss;
                if(ans.length()!=0&&num%1000!=0) ans=temp+" "+ans;//对于空格的处理,一开始的时候是不需要空格的,另外就是“000”的时候是不需要空格的。
                else ans=temp+ans;
                num=(num-num%1000)/1000;//处理前三位
                cnt++;
            }
            return ans;
        }
    }
};//130264790

努力加油a啊,(o)/~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

starlet_kiss

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

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

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

打赏作者

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

抵扣说明:

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

余额充值