https://leetcode.com/problems/integer-to-english-words/description/
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
这题主要是corner cases.
1, 0
2, 1000000
3, 处理结束字符是‘ ’: string.back() and string.pop_back()
4,定义合适的table
class Solution {
public:
string numberToWords(int num) {
if(num == 0) return "Zero";
string res = "";
int i = 0;
while(num)
{
if(num % 1000)
{
res = helper(num % 1000) + " " + thouds[i] + " " + res;
}
i ++;
num = num / 1000;
}
while(res.back() == ' ') res.pop_back();
return res;
}
string helper(int num)
{
string res;
if(num < 20)
{
res = lessThan20[num];
}
else if(num < 100)
{
res = tens[num / 10] + " " + helper(num % 10);
}
else
{
res = lessThan20[num / 100] + " " + "Hundred" + " " + helper(num % 100);
}
while(res.back() == ' ') res.pop_back();
return res;
}
private:
const string lessThan20[20] = {"", "One", "Two", "Three", "Four","Five","Six","Seven","Eight","Nine","Ten", "Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"};
const string tens[10] = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
const string thouds[4] = {"", "Thousand", "Million", "Billion"};
};