输出1到最大的N位数
2012-08-26 16:45
239 查看
输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。
这个题目主要考虑的是大整数越界的问题,下面采用了两种方法,一种是用数组模拟大整数相加,另一种是用递归的方法,递归的方法代码简单明了,但是就是效率比较低。
下面是我在自己的linux虚拟机上跑出来的5位数所用的时间,即是输出1到99999,非递归的方法时间为:
real 0m14.282s
user 0m0.286s
sys 0m2.157s
递归的方法时间为:
real 0m23.573s
user 0m0.714s
sys 0m3.413s
代码:
这个题目主要考虑的是大整数越界的问题,下面采用了两种方法,一种是用数组模拟大整数相加,另一种是用递归的方法,递归的方法代码简单明了,但是就是效率比较低。
下面是我在自己的linux虚拟机上跑出来的5位数所用的时间,即是输出1到99999,非递归的方法时间为:
real 0m14.282s
user 0m0.286s
sys 0m2.157s
递归的方法时间为:
real 0m23.573s
user 0m0.714s
sys 0m3.413s
代码:
#include <iostream> #include <list> using namespace std; void add(int *m, int *n, int len); //m+n的值,结果放在m中 bool isEnd(int *m); void print1ToMax_1(int n);//非递归 void printNum(list<int> result); void print1ToMax_2(list<int> &result, int n);//递归 int main() { //print1ToMax_1(5); list<int> result; print1ToMax_2(result, 5); return 0; } //------------解法一------------- bool isEnd(int *m) { if(m[0] == 1) return true; else return false; } void add(int *m, int *n, int len) { for(int i=0; i<len; i++) m[i] += n[i]; for(int i=len-1; i>=1; i--) { if(m[i] >= 10) { m[i] /= 10; m[i-1] += 1; } } } void print1ToMax_1(int n) { int *num = new int[n+1](); int *num_1 = new int[n+1](); num_1 = 1; while(!isEnd(num)) { bool flag = false; for(int i=0; i<n+1; i++) { if(flag == false && num[i] != 0) flag = true; if(flag) cout<<num[i]; } cout<<endl; add(num, num_1, n+1); } delete num; delete num_1; } //------------解法二------------- void printNum(list<int> result) { bool flag = false; for(list<int>::const_iterator iter = result.begin(); iter != result.end(); ++iter) { if(flag == false && *iter != 0) flag = true; if(flag) cout<<*iter; } cout<<endl; } void print1ToMax_2(list<int> &result, int n) { if(result.size() == n) { printNum(result); return; } for(int i=0; i<=9; i++) { result.push_back(i); print1ToMax_2(result, n); result.pop_back(); } }
相关文章推荐
- 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数
- 数据结构练习(28)输出1到最大的N位数
- 输出1到最大的N位数(运算)
- 输出1到最大的N位数 的迭代解法
- 程序员面试题精选100题(38)-输出1到最大的N位数[算法]
- 输出1到最大的N位数
- 【转帖】输出1到最大的N位数
- 打印输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。
- 65.输出1到最大的N位数(运算)
- 输出1到最大的N位数
- 输出1到最大的N位数
- 输出1到最大的N位数
- C语言输出从1到最大的n位数
- 65 输出1 到最大的N 位数
- 程序员面试题精选100题(38)-输出1到最大的N位数
- 程序员面试题精选100题(38)-输出1到最大的N位数
- 输出1到N位数最大值的全部数字
- 输出1到最大的N位数
- 输出1到最大的N位数 【微软面试100题 第六十五题】
- 38.输出1到最大的N位数[Print 1 to max number of N bits]