cavtc

导航

程序设计基础(C语言)教学案例(一)--大数,求1000!

  说明:这个程序演示了实现大数的无误差计算的一种方法。即以数组表示一个大数,然后自定义相关的计算规则。
  其中有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 }

posted on 2007-02-01 10:41  UnLimited...  阅读(567)  评论(0编辑  收藏  举报