更新时间:2022-10-04 15:18:29
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 }
|