前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 273. 整数转换英文表示

LeetCode 273. 整数转换英文表示

作者头像
Michael阿明
发布2020-07-13 16:04:58
8560
发布2020-07-13 16:04:58
举报

1. 题目

将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。

代码语言:javascript
复制
示例 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"

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/integer-to-english-words 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 题目不难,对各种情况的考虑需要全面
  • 写的不是很简洁,大家有更简洁的请告之学习观摩
代码语言:javascript
复制
class Solution {
	unordered_map<int,string> bits = {{1,"One"},{2,"Two"},{3,"Three"},
									{4,"Four"},{5,"Five"},{6,"Six"},{7,"Seven"},
									{8,"Eight"},{9,"Nine"},{10,"Ten"},{11,"Eleven"},
									{12,"Twelve"},{13,"Thirteen"},{14,"Fourteen"},
									{15,"Fifteen"},{16,"Sixteen"},{17,"Seventeen"},
									{18,"Eighteen"},{19,"Nineteen"},{20,"Twenty"},
									{30,"Thirty"},{40,"Forty"},{50,"Fifty"},
									{60,"Sixty"},{70,"Seventy"},{80,"Eighty"},{90,"Ninety"}};
public:
    string numberToWords(int num) {
    	if(num == 0)
    		return "Zero";
    	string ans, temp;
    	int i = 0;
    	vector<string> units = {"","Thousand","Million","Billion"};
    	while(num)
    	{
    		temp = tran(num%1000);
    		if(temp != "")//三位数都是0,跳过
    		{
    			temp = temp + (i>0 ? (" " + units[i]) : "");
    			ans = " " + temp + ans;
    		}
    		i++;
    		num /= 1000;//每3位一处理
    	}
    	if(ans.front() == ' ')    
    		ans = ans.substr(1);//最前面可能有空格,删除
    	return ans;
    }
    string tran(int num)//处理3位数
    {
    	if(num == 0)
    		return "";
    	string str;
    	int k = num/100;//百位数
    	if(k>0)
    		str = bits[k] + " " + "Hundred";
    	num %= 100;//后两位
    	if(num>0 && num <20)
    		if(str != "")//百位不为空
    			str += " " + bits[num];
    		else
    			str = bits[num];
    	else if(num >= 20)
    	{
    		k = num/10*10;// k = ?0
    		if(k != 0)
    		{
	    		if(str != "")//前面不为0
	    			str += " " + bits[k];
	    		else
	    			str += bits[k];
	    	}
    		num %= 10;//个位
    		if(num > 0)
    			if(str != "")//前面不为0
    				str += " " + bits[num];
    			else
    				str += bits[num];
    	}
    	return str;
    }
};
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档