题目: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"
将数字转为英文表示。
思路:
主要需要分情况讨论:设数字为n
1.当n < 20时,可以直接使用一个单词表示;
vector<string>numsb20 = { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
2.当20 <= n < 100时,需要几十的表示法,
vector<string>numsb100 = { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
3.当100 <= n < 1000时,需要百的表示法;
4.当1000 <= n < 1000000000时,需要千、百万、十亿的表示法,
他们每个间隔1000,其中包括上面的三种情况的表示法,注意int的范围使超过十亿的位数的数值不会超过20;
5.0特殊处理。
string LeetCode::numberToWords(int num){ if (!num)return "Zero"; string str; vector<string>numsb20 = { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; vector<string>numsb100 = { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; while (num){ if (num >= 1000000000){//十亿 int i = num / 1000000000;//int范围使i最大值不可能超过20 num %= 1000000000; str += numsb20.at(i - 1) + " Billion "; } else if (num >= 1000000){//百万 int i = num / 1000000; num %= 1000000; if (i >= 100){//i超过一百 str += numsb20.at(i / 100 - 1) + " Hundred "; i %= 100; } if (i >= 20){//i需要使用20以上的数表示 str += numsb100.at(i / 10 - 2) + " "; i %= 10; } if(i)str += numsb20.at(i - 1) + " Million "; else str += "Million "; } else if (num >= 1000){//一千 int i = num / 1000; num %= 1000; if (i >= 100){ str += numsb20.at(i / 100 - 1) + " Hundred "; i %= 100; } if (i >= 20){ str += numsb100.at(i / 10 - 2) + " "; i %= 10; } if(i)str += numsb20.at(i - 1) + " Thousand "; else str += "Thousand "; } else if (num >= 100){//一百 int i = num / 100; num %= 100; str += numsb20.at(i - 1) + " Hundred "; } else if (num >= 20){//几十 int i = num / 10 - 2; num %= 10; str += numsb100.at(i) + " "; } else if (num >= 1){//个位或十几 str += numsb20.at(num - 1) + " "; num = 0; } } str.pop_back(); return str; }