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 }
961 /****************************************
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 }免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。