其中有2个看点:
1、每个int型(16 bits)数组元素可以表示1位数字,也可以表示4位数字,因此,可扩展表示更大范围的数据;另外,若以某处为“小数点”,则表示大实数也是同理。
2、这个实例充分显示了数据结构中数据存储方式与对应计算方法的关系,可以作为理解数据结构这个概念的一个例证。
好了,废话少说,代码出场。
BTW,因为是上课要讲的,基本没有写注释,大家莫见怪哈
========================================================================
1
#include
<
stdio.h
>
2 void calc( int [], int , int );
3 void ShowResult( int [], int );
4 void multiply( int [], int , int );
5 void clear( int [], int );
6
7 #define SIZE 5000
8 void main()
9 {
10 int n,i;
11 int num[SIZE] = { 0 };
12 clrscr();
13
14 printf( " PLZ input a number: " );
15 scanf( " %d " , & n);
16 num[ 0 ] = 1 ;
17 for (i = 1 ;i <= n;i ++ )
18 calc(num,i,SIZE);
19 ShowResult(num,SIZE);
20
21 getchar();getchar();
22 }
23 void calc( int num[], int n, int len)
24 {
25 multiply(num,n,len);
26 clear(num,len);
27 /* ShowResult(num,len);
28 printf("\n");
29 */
30 }
31 void multiply( int num[], int n, int len)
32 {
33 int i = 0 ;
34 for (i = 0 ;i < len;i ++ )
35 num[i] = num[i] * n;
36 }
37 void clear( int num[], int len)
38 {
39 int i = 0 ;
40 for (i = 0 ;i < len;i ++ )
41 {
42 num[i + 1 ] = num[i + 1 ] + num[i] / 10 ;
43 num[i] = num[i] % 10 ;
44 }
45 }
46
47 void ShowResult( int num[], int len)
48 {
49 int i = 0 ,n;
50 for (i = len - 1 ;i >= 0 ;i -- )
51 if (num[i] != 0 ) break ;
52 n = i;
53 printf( " The Length of the Result is:%d.\n " ,n);
54 for (i = n;i >= 0 ;i -- )
55 printf( " %d " ,num[i]);
56 }
2 void calc( int [], int , int );
3 void ShowResult( int [], int );
4 void multiply( int [], int , int );
5 void clear( int [], int );
6
7 #define SIZE 5000
8 void main()
9 {
10 int n,i;
11 int num[SIZE] = { 0 };
12 clrscr();
13
14 printf( " PLZ input a number: " );
15 scanf( " %d " , & n);
16 num[ 0 ] = 1 ;
17 for (i = 1 ;i <= n;i ++ )
18 calc(num,i,SIZE);
19 ShowResult(num,SIZE);
20
21 getchar();getchar();
22 }
23 void calc( int num[], int n, int len)
24 {
25 multiply(num,n,len);
26 clear(num,len);
27 /* ShowResult(num,len);
28 printf("\n");
29 */
30 }
31 void multiply( int num[], int n, int len)
32 {
33 int i = 0 ;
34 for (i = 0 ;i < len;i ++ )
35 num[i] = num[i] * n;
36 }
37 void clear( int num[], int len)
38 {
39 int i = 0 ;
40 for (i = 0 ;i < len;i ++ )
41 {
42 num[i + 1 ] = num[i + 1 ] + num[i] / 10 ;
43 num[i] = num[i] % 10 ;
44 }
45 }
46
47 void ShowResult( int num[], int len)
48 {
49 int i = 0 ,n;
50 for (i = len - 1 ;i >= 0 ;i -- )
51 if (num[i] != 0 ) break ;
52 n = i;
53 printf( " The Length of the Result is:%d.\n " ,n);
54 for (i = n;i >= 0 ;i -- )
55 printf( " %d " ,num[i]);
56 }