1 /****************************************
2 > File Name:test.c
3 > Author:xiaoxiaohui
4 > mail:1924224891@qq.com
5 > Created Time:2016年05月26日 星期四 15时31分00秒
6 ****************************************/
7
8
9
10
11
12 //此题的关键是解决大数问题,在这里我用字符数组解决大数的存储
13 //在字符数组的最后一位存的是最低位,依次往前推,加1是在最低位加的
14 //当低位为9时,加1会发生进位,所以进到高位时要先加1,所以要设置进位标志
15 //当最高位发生进位时,则表示到了最大的数
16
17
18 #include<stdio.h>
19
20 void Print(char* buf)
21 {
22 int size = sizeof(buf);
23
24 for(int i = 0; i < size; i++) //使buf指向第一个不为‘0’的字符
25 {
26 if(buf[i] == '0')
27 {
28 buf++;
29 }
30 else
31 {
32 break;
33 }
34 }
35
36 printf("%s\t", buf);
37 }
38
39 int isBiggest(char* buf)
40 {
41 int flog = 0;
42 int size = sizeof(buf);
43 int over_flog = 0; //进位标志
44 int i = 0;
45
46 for(i = size - 1; i >= 0; i--)
47 {
48 int sum = buf[i] - '0' + over_flog; //把最i位的值取出来
49 if(i == size - 1) //当是最低位时,则在这一位上加1
50 {
51 sum += 1;
52 }
53
54 if(sum >= 10) //产生进位
55 {
56 if(i == 0) //当最高位要进位了,就代表已经是最大值了
57 {
58 flog = 1;
59 }
60 else
61 {
62 buf[i] = '0'; //这一位要变为0
63 over_flog = 1; //高一位的要加1
64 }
65 }
66 else //不需要进位
67 {
68 buf[i] = '0' + sum;
69 break;
70 }
71
72 return flog;
73 }
74 }
75
76
77 void PrintToMax(int n)
78 {
79 if(n <= 0)
80 {
81 printf("parameter is error!\n");
82 return;
83 }
84
85 char* buf = (char*)melloc( (n + 1) * sizeof(char));
86 memset(buf,'0',sizeof(buf));
87 buf[n] = '\0';
88
89 while( !isBiggest(buf))
90 {
91 Print(buf);
92 }
93
94 free(buf);
95 }
96
1 /****************************************
2 > File Name:test1.c
3 > Author:xiaoxiaohui
4 > mail:1924224891@qq.com
5 > Created Time:2016年05月26日 星期四 16时44分54秒
6 ****************************************/
7
8 #include<stdio.h>
9
10
11 void Print(char* buf)
12 {
13 int size = sizeof(buf);
14
15 for(int i = 0; i < size; i++) //使buf指向第一个不为‘0’的字符
16 {
17 if(buf[i] == '0')
18 {
19 buf++;
20 }
21 else
22 {
23 break;
24 }
25 }
26
27 printf("%s\t", buf);
28 }
29
30 void PrintDigit(char* buf, int length, int index)
31 {
32 if(index == length)
33 {
34 Print(buf);
35 return;
36 }
37
38 for(int i = 0; i < 10; i++)
39 {
40 buf[index] = '0' + i;
41 PrintDigit(buf, length, index + 1);
42 }
43 }
44
45 void PrintToMax(int n)
46 {
47 if(n <= 0)
48 {
49 printf("parameter is error!\n");
50 return;
51 }
52
53 char* buf = (char*)melloc(size(char) * (n + 1));
54 memset(buf, '0', sizeof(buf));
55 buf[n] = '\0';
56
57 for(int i = 0; i < 10; i++)
58 {
59 PrintDigit(buf, n, 0);
60 }
61 }
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。