273. Integer to English Words
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
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"
这个题情况比较多。所有细节都要满足。
思路就是 从后往前每3位一起得到一个string。然后加上后缀(Thousand,million等)拼接。
class Solution {
public:
string numberToWords(int num)
{
string Snum = to_string(num);
string ret = "";
int k = 0;
vector<string> kk;
kk.push_back("");
kk.push_back(" Thousand");
kk.push_back(" Million");
kk.push_back(" Billion");
while ( 1 )
{
if (Snum.size() <= 3)
{
ret = helper(Snum) + kk[k] + ret;
if (ret == "")
return "Zero";
if (ret[0] == ' ')
return ret.substr(1, ret.size() - 1);
}
else
{
string helper_ret = helper(Snum.substr(Snum.size() - 3, 3));
if (helper_ret != "")
ret = helper_ret + kk[k] + ret;
Snum = Snum.substr(0, Snum.size() - 3);
}
k++;
}
}
string helper(string s)
{
map<int, string> mp;
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";
mp[10] = "Ten";
mp[11] = "Eleven";
mp[12] = "Twelve";
mp[13] = "Thirteen";
mp[14] = "Fourteen";
mp[15] = "Fifteen";
mp[16] = "Sixteen";
mp[17] = "Seventeen";
mp[18] = "Eighteen";
mp[19] = "Nineteen";
mp[20] = "Twenty";
mp[30] = "Thirty";
mp[40] = "Forty";
mp[50] = "Fifty";
mp[60] = "Sixty";
mp[70] = "Seventy";
mp[80] = "Eighty";
mp[90] = "Ninety";
int is = to_int(s);
if (is == 0)
return "";
if (mp.find(is) != mp.end())
{
return " " + mp[is];
}
else if (is < 100) //可能是099进来 得转换为99
{
s = to_string(is);
return " " + mp[to_int(s.substr(0, 1)) * 10] + " " + mp[to_int(s.substr(1, 1))];
}
else //3位
{
return " " + mp[to_int(s.substr(0, 1))] + " Hundred" + helper(s.substr(1, 2));
}
}
private:
int to_int(string s)
{
stringstream ss;
ss<<s;
int i;
ss>>i;
return i;
}
};
本文介绍了一种将非负整数转换为其英文单词表示的方法。通过逆向处理每三位数字并附加对应的英文后缀(如Thousand、Million等),实现了整数到英文的准确转换。文章详细解释了实现思路及代码实现。
1465

被折叠的 条评论
为什么被折叠?



