打印从1到最大的n位数.
2014-01-21 09:00
204 查看
输入数字n,按顺序从打印出从1到最大的n位十进制数.比如输入3,也就是最大的3位数是999,那么就打印1.2.3.---999;
方法1:非递归
方法2.递归法,全排列用递归表达,数字的每一位都可能是0-9中的一个数,然后设置下一位。递归结束的条件是我们已经设置了数字的最后一位.
方法1:非递归
#include "stdafx.h" #include <iostream> #include <exception> using namespace std; void PrintNumber(char* number) { bool isBeginning0 = true; int nLength = strlen(number); for(int i = 0;i<nLength;++i) { if(isBeginning0&&number[i]!='0') isBeginning0 = false; if(!isBeginning0) { printf("%c",number[i]); } } printf("\t"); } bool Increment(char* number) { bool isOverflow = false; int nTakeOver = 0; int nLength = strlen(number); for(int i = nLength-1;i>=0;i--){ int nSum = number[i]-'0'+nTakeOver; if(i==nLength-1) nSum++; if(nSum>=10) { if(i==0) isOverflow=true; else { nSum -= 10; nTakeOver=1; number[i]='0'+nSum; } } else{ number[i]='0'+nSum; break; } } return isOverflow; } void PrintToMaxOfNDigits(int n) { if(n<=0) return; char *number = new char[n+1]; memset(number,'0',n); number ='\0'; while(!Increment(number)) { PrintNumber(number); } delete []number; } int _tmain(int argc, _TCHAR* argv[]) { int n = 4; PrintToMaxOfNDigits(n); return 0; }
方法2.递归法,全排列用递归表达,数字的每一位都可能是0-9中的一个数,然后设置下一位。递归结束的条件是我们已经设置了数字的最后一位.
#include "stdafx.h" #include <iostream> #include <exception> using namespace std; void PrintNumber(char* number) { bool isBeginning0 = true; int nLength = strlen(number); for(int i = 0;i<nLength;++i) { if(isBeginning0&&number[i]!='0') isBeginning0 = false; if(!isBeginning0) { printf("%c",number[i]); } } printf("\t"); } void Print1ToMaxOfNDigitsRecursively(char* number,int length,int index) { if(index==length-1) { PrintNumber(number); return; } for(int i = 0;i<10;++i) { number[index+1]=i+'0'; Print1ToMaxOfNDigitsRecursively(number,length,index+1); } } void Print1ToMaxOfNDigits(int n) { if(n<=0) return; char* number = new char[n+1]; number ='\0'; for(int i = 0;i<10;++i) { number[0]=i+'0'; Print1ToMaxOfNDigitsRecursively(number,n,0); } delete[] number; } int _tmain(int argc, _TCHAR* argv[]) { int n = 4; Print1ToMaxOfNDigits(n); return 0; }
相关文章推荐
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 07 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数。
- 打印1到最大的n位数
- 打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- 【剑指offer】面试题12、打印 1 到最大的 n 位数
- 算法题21 打印1到最大的n位数
- P94、面试题12:打印1到最大的n位数
- 剑指offer-面试题12.打印1到最大的n位数
- 剑指offer-面试题12-打印1到最大的n位数
- 打印1到最大的N位数
- 打印1到最大的n位数
- 打印 1 到最大的 n 位数
- 打印1到最大的n位数
- 题目1515:打印1到最大的N位数
- 剑指offer 面试题12 打印1到最大的N位数