打印从1到最大的n位数.

输入数字n,按顺序从打印出从1到最大的n位十进制数.比如输入3,也就是最大的3位数是999,那么就打印1.2.3.---999;

方法1:非递归

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <exception>
 4 using namespace std;
 5 void PrintNumber(char* number)
 6 {
 7     bool isBeginning0 = true;
 8     int nLength = strlen(number);
 9     for(int i = 0;i<nLength;++i)
10     {
11         if(isBeginning0&&number[i]!='0')
12             isBeginning0 = false;
13         if(!isBeginning0)
14         {
15             printf("%c",number[i]);
16         }
17 
18     }
19     printf("	");
20 }
21 bool Increment(char* number)
22 {
23     bool isOverflow = false;
24     int nTakeOver = 0;
25     int nLength = strlen(number);
26     for(int i = nLength-1;i>=0;i--){
27         int nSum = number[i]-'0'+nTakeOver;
28         if(i==nLength-1)
29             nSum++;
30         if(nSum>=10)
31         {
32             if(i==0)
33                 isOverflow=true;
34             else
35             {
36                 nSum -= 10;
37                 nTakeOver=1;
38                 number[i]='0'+nSum;
39 
40             }
41         }
42         else{
43             number[i]='0'+nSum;
44             break;
45         }
46     }
47     return isOverflow;
48 
49 }
50 void PrintToMaxOfNDigits(int n)
51 {
52     if(n<=0)
53         return;
54     char *number = new char[n+1];
55     memset(number,'0',n);
56     number[n]='';
57     while(!Increment(number))
58     {
59         PrintNumber(number);
60     }
61     delete []number;
62 }
63 int _tmain(int argc, _TCHAR* argv[])
64 {
65     int n = 4;
66 PrintToMaxOfNDigits(n);
67     return 0;
68 }

 方法2.递归法,全排列用递归表达,数字的每一位都可能是0-9中的一个数,然后设置下一位。递归结束的条件是我们已经设置了数字的最后一位.

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <exception>
 4 using namespace std;
 5 void PrintNumber(char* number)
 6 {
 7     bool isBeginning0 = true;
 8     int nLength = strlen(number);
 9     for(int i = 0;i<nLength;++i)
10     {
11         if(isBeginning0&&number[i]!='0')
12             isBeginning0 = false;
13         if(!isBeginning0)
14         {
15             printf("%c",number[i]);
16         }
17 
18     }
19     printf("	");
20 }
21 void Print1ToMaxOfNDigitsRecursively(char* number,int length,int index)
22 {
23     if(index==length-1)
24     {
25         PrintNumber(number);
26         return;
27     }
28     for(int i = 0;i<10;++i)
29     {
30         number[index+1]=i+'0';
31         Print1ToMaxOfNDigitsRecursively(number,length,index+1);
32     }
33 }
34 void Print1ToMaxOfNDigits(int n)
35 {
36     if(n<=0)
37         return;
38     char* number = new char[n+1];
39     number[n]='';
40     for(int i = 0;i<10;++i)
41     {
42         number[0]=i+'0';
43         Print1ToMaxOfNDigitsRecursively(number,n,0);
44     }
45     delete[] number;
46 
47 }
48 int _tmain(int argc, _TCHAR* argv[])
49 {
50     int n = 4;
51 Print1ToMaxOfNDigits(n);
52     return 0;
53 }
原文地址:https://www.cnblogs.com/crazycodehzp/p/3527770.html