273. 整数转换英文表示(模拟&递归)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了273. 整数转换英文表示(模拟&递归)相关的知识,希望对你有一定的参考价值。
273. 整数转换英文表示 (模拟&递归)
用四个数组分别存:个位、11-19,20-90,(千、万,亿)
递归计算。
先计算有多少亿。
然后减去对应的亿部分。
再计算万部分,最后计算千部分。
e
p
:
1234567891
ep: 1234567891
ep:1234567891
1234567891
÷
1
0
9
=
1
…
…
234567891
(
读
一
亿
)
234567891
÷
1
0
6
=
234
…
…
567891
(
读
二
千
三
百
四
十
万
)
567891
÷
1
0
3
=
567
…
…
891
(
读
五
百
六
十
七
千
)
891
÷
1
=
891
…
…
0
(
读
八
百
九
十
一
)
1234567891\\div 10^9 = 1 \\dots\\dots 234567891 (读一亿) \\\\ 234567891\\div 10^6 = 234\\dots\\dots 567891 (读二千三百四十万)\\\\ 567891\\div 10^3 = 567\\dots\\dots 891 (读五百六十七千)\\\\ 891\\div 1 = 891\\dots\\dots 0 (读八百九十一)
1234567891÷109=1……234567891(读一亿)234567891÷106=234……567891(读二千三百四十万)567891÷103=567……891(读五百六十七千)891÷1=891……0(读八百九十一)
参考code
class Solution {
public:
vector<string> singles = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
vector<string> teens = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
vector<string> tens = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
vector<string> thousands = {"", "Thousand", "Million", "Billion"};
string numberToWords(int num) {
if (num == 0) {
return "Zero";
}
string sb;
for (int i = 3, unit = 1000000000; i >= 0; i--, unit /= 1000) {
int curNum = num / unit;
if (curNum != 0) {
num -= curNum * unit;
string curr;
recursion(curr, curNum);
curr = curr + thousands[i] + " ";
sb = sb + curr;
}
}
while (sb.back() == ' ') {
sb.pop_back();
}
return sb;
}
void recursion(string & curr, int num) {
if (num == 0) {
return;
} else if (num < 10) {
curr = curr + singles[num] + " ";
} else if (num < 20) {
curr = curr + teens[num - 10] + " ";
} else if (num < 100) {
curr = curr + tens[num / 10] + " ";
recursion(curr, num % 10);
} else {
curr = curr + singles[num / 100] + " Hundred ";
recursion(curr, num % 100);
}
}
};
以上是关于273. 整数转换英文表示(模拟&递归)的主要内容,如果未能解决你的问题,请参考以下文章
273 Integer to English Words 整数转换英文表示
LeetCode 273. 整数转换英文表示 / 29. 两数相除 / 412. Fizz Buzz
2022-01-09:整数转换英文表示。将非负整数 num 转换为其对应的英文表示。 示例 1: 输入:num = 123, 输出:“One Hundred Twenty Three“。 力扣273。