1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
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 }
|
本文转自 ye小灰灰 51CTO博客,原文链接:http://blog.51cto.com/10704527/1783641,如需转载请自行联系原作者