打印1到最大的n位数
来源:互联网 发布:数据挖掘电脑配置 编辑:程序博客网 时间:2024/05/29 12:42
//输入数字n,按顺序打印出从1最大的n位十进制数。//比如输入3,则打印1、2、3一直到最大的3位数即999.#include "iostream"#include "string"#include "vector"using namespace std;//用一个string做加法器void stringAdd(string &str){if (str.empty()){str = "1";return;}int len = static_cast<int>(str.size());for (int i = len - 1; i >= 0; i--){if (str[i] == '9')str[i] = '0';else{str[i]++;return;}}str = "1" + str;return;}void print1ToMaxOfNDigits_1_str(int n){if (n <= 0)return;string max = string(n, '9');string str("1");while (str != max){cout << str << ",";stringAdd(str);}cout << str << endl;}//做一个vector的加法器void vectorAdd(vector<int> &vec){if (vec.empty()){vec.push_back(1);return;}for (size_t i = 0; i < vec.size(); i++) //index大小正比位数高低{if ((vec[i]) == 9)vec[i] = 0;else{vec[i] += 1;return;}}vec.push_back(1);return;}void printVecAsNum(const vector<int> &num){for (int i = static_cast<int>(num.size()) - 1; i >= 0; i--){cout << num[i];}}bool MaxofNDigits(const vector<int> &vec, int n){if (vec.size() < n)return false;for (size_t i = 0; i < vec.size(); i++){if (vec[i] != 9)return false;}return true;}void print1ToMaxOfNDigits_1_vec(int n){if (n <= 0)return;vector<int> num;vectorAdd(num);while (!MaxofNDigits(num, n)){printVecAsNum(num);cout << ",";vectorAdd(num);}printVecAsNum(num);cout << endl;}//转化成全排列问题void printNum(char* num){int len = strlen(num);int i = 0;while (num[i] == '0')i++;while (i < len){printf("%c", num[i]);i++;}printf("\t"); //这里格式就没用“,”隔开了,更简单了。}void print1ToMaxOfNDigitsRecursively(char* num, int len, int index){if (index == len - 1){printNum(num);return;}for (int i = 0; i < 10; i++){num[index + 1] = i + '0';print1ToMaxOfNDigitsRecursively(num, len, index + 1);}}void print1ToMaxOfNDigits_1_permutation(int n){if (n <= 0)return;char* num = new char[n + 1];num[n] = '\0';for (int i = 0; i < 10; i++){num[0] = i + '0';print1ToMaxOfNDigitsRecursively(num, n, 0);}delete[] num;}void test(){print1ToMaxOfNDigits_1_str(-1);print1ToMaxOfNDigits_1_str(0);print1ToMaxOfNDigits_1_permutation(2);print1ToMaxOfNDigits_1_str(5);}int main(){test();return 0;}
三种方法,个人更倾向于string的方法。(关于输出格式,可以根据需求更改。)
这里主要是考虑大数问题,如果对效率要求高,可以甚至阈值,当小于某个数max(int)-1,直接递增输出。大于之后才用其他的方法。
0 0
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1 到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- Spring MVC教程 映射处理器Handler Mapping
- 【Linux开发】linux设备驱动归纳总结(八):4.总线热插拔
- 如何让服务只运行单个实例
- 实习期间第一个小程序
- 【Linux开发】linux设备驱动归纳总结(九):1.platform总线的设备和驱动
- 打印1到最大的n位数
- 【Linux开发】linux设备驱动归纳总结(十):1.udev&misc
- C++第9周项目 数组和指针 【项目2-我的数组类】(复习新版)
- EM算法及其推广
- iOS--TextField知多少
- iOS算法(一)快速排序算法
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)zhuanzai
- 【Linux开发】linux设备驱动归纳总结(十一):写个简单的看门狗驱动
- Tcp协议的窗口