将非负整数转换为其对应的英文表示。可以保证给定输入小于 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)/~