leetcode 273: Integer to English Words

本文介绍了一种使用C++编程实现将整数转换为英文单词的方法,包括处理千位、百位、十位及个位数的情况,并且特别注意了20到99之间的特殊数字表达。

Be careful about many corner cases.

class Solution {
public:
    string numberToWords(int num) {
        string res;
        vector<string> mp(10);
        vector<string> mp1(10);
        mp[0]="";
        mp[1]="One";
        mp[2]="Two";
        mp[3]="Three";
        mp[4]="Four";
        mp[5]="Five";
        mp[6]="Six";
        mp[7]="Seven";
        mp[8]="Eight";
        mp[9]="Nine";
        mp1[2]="Twenty";
        mp1[3]="Thirty";
        mp1[4]="Forty";
        mp1[5]="Fifty";
        mp1[6]="Sixty";
        mp1[7]="Seventy";
        mp1[8]="Eighty";
        mp1[9]="Ninety";
        while(num>=100)
        {
            if(!res.empty())
                res+=" ";
            string temp;
            if(num>=1000000000)
            {
                temp=numberToWords(num/1000000000);
                res+=temp+" Billion";
                num%=1000000000;
            }
            else if(num>=1000000)
            {
                temp=numberToWords(num/1000000);
                res+=temp+" Million";
                num%=1000000;
            }
            else if(num>=1000)
            {
                temp=numberToWords(num/1000);
                res+=temp+" Thousand";
                num%=1000;
            }
            else if(num>=100)
            {
                res+=mp[num/100]+" Hundred";
                num%=100;
            }
        }
        if(!res.empty()&&num)
            res+=" ";
        if(num>=20)
        {
            int digit=num/10;
            res+=mp1[digit];
            if(num%10)
                res+=" "+mp[num%10];
        }
        else if(num>=10&&num<20)
        {
            switch(num)
            {
                case 10:
                    res+="Ten";
                    break;
                case 11:
                    res+="Eleven";
                    break;
                case 12:
                    res+="Twelve";
                    break;
                case 13:
                    res+="Thirteen";
                    break;
                case 14:
                    res+="Fourteen";
                    break;
                case 15:
                    res+="Fifteen";
                    break;
                case 16:
                    res+="Sixteen";
                    break;
                case 17:
                    res+="Seventeen";
                    break;
                case 18:
                    res+="Eighteen";
                    break;
                case 19:
                    res+="Nineteen";
                    break;
            }
        }
        else if(num>0)
        {
            res+=mp[num];
        }
        if(res.empty()&&num==0)
            res="Zero";
        return res;
    }
};


基于模拟退火的计算器 在线运行 访问run.bcjh.xyz。 先展示下效果 https://pan.quark.cn/s/cc95c98c3760 参见此仓库。 使用方法(本地安装包) 前往Releases · hjenryin/BCJH-Metropolis下载最新 ,解压后输入游戏内校验码即可使用。 配置厨具 已在2.0.0弃用。 直接使用白菜菊花代码,保留高级厨具,新手池厨具可变。 更改迭代次数 如有需要,可以更改 中39行的数字来设置迭代次数。 本地编译 如果在windows平台,需要使用MSBuild编译,并将 改为ANSI编码。 如有条件,强烈建议这种本地运行(运行可加速、可多次重复)。 在 下运行 ,是游戏中的白菜菊花校验码。 编译、运行: - 在根目录新建 文件夹并 至build - - 使用 (linux) 或 (windows) 运行。 最后在命令行就可以得到输出结果了! (注意顺序)(得到厨师-技法,表示对应新手池厨具) 注:linux下不支持多任务选择 云端编译已在2.0.0弃用。 局限性 已知的问题: - 无法得到最优解! 只能得到一个比较好的解,有助于开阔思路。 - 无法选择菜品数量(默认拉满)。 可能有一定门槛。 (这可能有助于防止这类辅助工具的滥用导致分数膨胀? )(你问我为什么不用其他语言写? python一个晚上就写好了,结果因为有涉及json读写很多类型没法推断,jit用不了,算这个太慢了,所以就用c++写了) 工作原理 采用两层模拟退火来最大化总能量。 第一层为三个厨师,其能量用第二层模拟退火来估计。 也就是说,这套方法理论上也能算厨神(只要能够在非常快的时间内,算出一个厨神面板的得分),但是加上厨神的食材限制工作量有点大……以后再说吧。 (...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值