打印1到最大的n位数
题目
输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。要考虑大数问题
大数加法,乘法详解:https://www.cnblogs.com/tianzeng/p/9020822.html
解法
用字符串或者数组表达大数
- 把字符串中的每一个数字都初始化为'0';
- 每一次为字符串表示的数字加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表示十进制数字并没有充分利用内存,怎样才能更高效的利用内存。?