leetcode-【hard】273. Integer to English Words
题目:
273. Integer to English Words
For example,
123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
答案:
按着自己用英文阅读整数的顺序来就行:
1、这道题目不是难在思路上,而是难在考虑的情况比较多,比较多细节,一不小心就有小bug,需要思路清晰,逻辑清晰
2、英文中用来表示整数的单词并不多,分类:
1-9(个位数),11-19(特殊的十位数),10-90(十位数),100(hundred),1000(thousand),1000000(million),1000000000(billion)
3、10这个十位数比较特别,只有在后两位完全为10时,才用ten
4、注意空格,后面没有数字了,就不能加空格了
5、每千位数跟后面的千位数(如果不为空,即0000000……)要有空格
6、注意不要乱加前缀空格和后缀空格
将上面的细节注意了就AC啦
代码:
#include <vector>
#include <string> using std::vector;
using std::string; string n2s[] = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
string g2s[] = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
string t2s[] = {"Ten","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"}; class Solution {
private:
vector<string> ans; public:
string numberToWords(int num) {
if(num == )
{
return "Zero";
} unsigned int rem;
unsigned int one;
unsigned int two;
unsigned int three; string perAns;
ans.clear(); do
{
//获取余数
rem = num % ;
num = num /; //存储每次计算的结果
perAns.clear();
perAns = ""; //一千以内的数,取每一位
one = rem % ;
two = (rem / ) % ;
three = (rem / ) % ; if(three != )
{
perAns += n2s[three - ];
perAns += " Hundred";
} //如果后两位都为0,那么后面就没有数了,也就不需要加空格
if(perAns != "" && (one != || two != ))
{
perAns += " ";
} if(two == )
{
//考虑最后一位是否为0的情况,因最后两位为10时,需要用“ten”
//否则就是十位数
if(one == )
{
perAns += t2s[];
}else
{
perAns += g2s[one - ];
}
//考虑two不为0,不为1,则按一般规则去计算
}else if(two != )
{
perAns += t2s[two - ]; if(one != )
{
perAns += " ";//如果最后一位不为0,需要在其前面加空格
perAns += n2s[one - ];
}
//考虑two为0的情况
}else
{
if(one != )
{
perAns += n2s[one - ];
}
} //将结果存储到ans中,ans中的答案是以逆序形式存储了每个千位数
ans.push_back(perAns);
}while(num != ); string result = "";
unsigned int len = ans.size();
//len最大长度为4,考虑每种位数就行,这里用的时候就会发现,合理使用goto,程序逻辑会很清晰
switch(len)
{
case :goto three;break;
case :goto two;break;
case :goto one;break;
case :goto zero;break;
} three:
if(ans[] != "")
{
result += ans[];
result += " Billion"; if(ans[] != "" || ans[] != "" || ans[] != "")
{
result += " ";
}
} two:
if(ans[] != "")
{
result += ans[];
result += " Million"; if(ans[] != "" || ans[] != "")
{
result += " ";
}
} one:
if(ans[] != "")
{
result += ans[];
result += " Thousand"; if(ans[] != "")
{
result += " ";
}
} zero:
if(ans[] != "")
{
result += ans[];
} return result;
}
};
说明: 合理使用goto会取到很好的效果哦
leetcode-【hard】273. Integer to English Words的更多相关文章
- 【LeetCode】273. Integer to English Words
Integer to English Words Convert a non-negative integer to its english words representation. Given i ...
- LeetCode 【2】 Reverse Integer --007
六月箴言 万物之中,希望最美:最美之物,永不凋零.—— 斯蒂芬·金 第二周算法记录 007 -- Reverse Integer (整数反转) 题干英文版: Given a 32-bit signed ...
- LeetCode: 【L4】N-Queens 解题报告
[L4]N-Queens 解题报告 N-Queens Total Accepted: 16418 Total Submissions: 63309 My Submissions The n-queen ...
- leetcode@ [273] Integer to English Words (String & Math)
https://leetcode.com/problems/integer-to-english-words/ Convert a non-negative integer to its englis ...
- [LeetCode] 273. Integer to English Words 整数转为英文单词
Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...
- LeetCode 273. Integer to English Words
原题链接在这里:https://leetcode.com/problems/integer-to-english-words/description/ 题目: Convert a non-negati ...
- 【LeetCode算法-7】Reverse Integer
LeetCode第7题: Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outp ...
- [leetcode]273. Integer to English Words 整数转英文单词
Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...
- 【Leetcode】【Easy】Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Have you ...
随机推荐
- 转载list
Linux系统下安装rz/sz命令及使用说明 http://blog.csdn.net/kobejayandy/article/details/13291655
- windows server 2012 FTP SMB 文件夹权限继承
被坑了..win默认的权限继承,有继承就没有smb目录继承,有smb目录继承 父级文件夹的权限就删不掉.. 换ftp轻松愉快...
- lvs+keeplived笔录
关于keeplived配置文件的详细描述如下 链接:http://blog.csdn.net/jibcy/article/details/7826158 实验环境: 主Keepalived 172.1 ...
- (转) WTF is computer vision?
WTF is computer vision? Posted Nov 13, 2016 by Devin Coldewey, Contributor Next Story Someon ...
- linux find命令
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- jQuery中,$('#main') 与 document.getElementById('main')是什么样的关系-转
$('#main')[0]和document.getElementById('main')两个一模一样.解释:$('#main'):是一个jquery写法,#main是一个过滤器表示方法,表示查找一个 ...
- java读取文件内容
获取文件内容 picurl = "http://www.baidu.com/data.txt"; URL urlfile = new URL(picurl); BufferedRe ...
- 现代DOJO(翻译)
http://dojotoolkit.org/documentation/tutorials/1.10/modern_dojo/index.html 你可能已经不用doio一段时间了,或者你一直想保持 ...
- coderforces 731c
题目大意:给出m组数据,每组数据包括两个数Li与Ri,分别表示左右袜子的索引(下标),表示这一天要穿的袜子:而我们要使得每天穿的这两只袜子的颜色相同,所以可以改变袜子的颜色,每次只能改变一只袜子的颜色 ...
- C# 会可能需要的扩展
1. List 转成DataSet /// <summary> /// 集合数据转成 DataSet /// </summary> /// <typepara ...