【剑指offer 面试题12】打印1到最大的n位数

思路:

  用n位字符数组表示n位数,通过递归的方式逐层(位)遍历,递归终止时打印。

 

 1 #include "stdio.h"
 2 #include "string.h"
 3 
 4 //打印“数字”
 5 void printNum(char* number)
 6 {
 7     //设置前导零状态为开启
 8     bool ishead0 = true;
 9     for(int i = 0; i < strlen(number); i++)
10     {
11         //遇到第一个非零数,关闭前导零状态
12         if(number[i] != '0' && ishead0 == true)
13             ishead0 = false;
14         //前导零状态关闭下,方可打印数字
15         if(!ishead0)
16             printf("%c", number[i]);
17     }
18     printf("\n");
19 }
20 
21 void print1toNrec(char* number, int len, int index)
22 {
23     //递归终止,打印
24     if(index == len)
25     {
26         printNum(number);
27         return ;
28     }
29 
30     //递归执行
31     for(int i = 0; i < 10; i++)
32     {
33         number[index] = '0' + i;
34         print1toNrec(number, len, index + 1);
35     }
36 }
37 
38 void print1toN(int n)
39 {
40     if(n <= 0)
41         return ;
42 
43     //定义并初始化number数组
44     char* number = new char[n + 1];
45     memset(number, '0', n);
46     number[n] = '\0';
47 
48     //从number[0]处递归调用
49     for(int i = 0; i < 10; i++)
50     {
51         number[0] = '0' + i;
52         print1toNrec(number, n, 1);
53     }
54 }
55 
56 int main()
57 {
58     print1toN(3);
59 }

 

posted @ 2015-06-19 21:52  tjuloading  阅读(169)  评论(0)    收藏  举报