打印1到最大的n位数

题目

输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。考虑大数问题

大数加法,乘法详解:https://www.cnblogs.com/tianzeng/p/9020822.html

解法

用字符串或者数组表达大数

  1. 把字符串中的每一个数字都初始化为'0';
  2. 每一次为字符串表示的数字加1,再打印出来;
class Solution {
private:
    bool increase(string &tmp) {
        bool is_end = true;
        int over_flow = 0;
        int len = tmp.size();
        for (int i = len -1; i >= 0; --i) {
            int diff = tmp[i] - '0' + over_flow;
            if (i == len - 1) {
                ++diff;
            }

            if (diff >= 10) {
                if (i == 0) {
                    is_end = false;
                }
                else {
                    over_flow = 1;
                    tmp[i] = diff - 10 + '0';
                }
            }
            else {
                tmp[i] = diff + '0';
                break;
            }
        }
        return is_end;
    }
    void save_res(vector<int> &res, string &tmp) {
        string str = tmp.substr(tmp.find_first_not_of("0"));
        res.push_back(atoi(str.c_str()));
        return ;
    }
public:
    vector<int> printNumbers(int n) {
        if (n <= 0) {
            return {};
        }

        vector<int> res;
        string tmp(n, '0');
        while (increase(tmp) == true) {
            save_res(res, tmp);
        }
        return res;
    }
};

 拓展

  • 用char型存储10进制数字的每一位,8bit的char型字符能表示256个字符,而十进制只有0-9的10个数字,用char表示十进制数字并没有充分利用内存,怎样才能更高效的利用内存。?