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=1234567891(亿)234567891÷106=234567891()567891÷103=567891()891÷1=8910()
参考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. 整数转换英文表示(模拟&递归)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 273.整数转换英文表示

273 Integer to English Words 整数转换英文表示

LeetCode 273. 整数转换英文表示 / 29. 两数相除 / 412. Fizz Buzz

2022-01-09:整数转换英文表示。将非负整数 num 转换为其对应的英文表示。 示例 1: 输入:num = 123, 输出:“One Hundred Twenty Three“。 力扣273。

[LeetCode] 273. Integer to English Words

LeetCode刷题273-困难-整数转换成英文