- 注册时间
- 2010-2-12
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 1213
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
我才开始学习C语言,觉得它确实比VB快。我今天贴一个程序,请高手看看,请多多提意见。
1) 问题的提出:我在编写代码时,无意中发现,如果多算了八万次除法、八万次求余,程序输出反而快。如果把这十六万次乘除法去掉,直接输出。结果反而慢。
2) 代码如下:
3)说明:程序中的gets()是用来在屏幕上输入大整数的。现在没有用,已将它注释了。为了产生大整数,在程序的开始部分使用了随机数发生器。打双横线的部分就是。这里产生的是四万位的十进制大整数。- #include <stdio.h>
- #include <string.h>//*以下程序是我自己编写的验证超大数组的输出,已通过VC++6.0编译。
- #include <stdlib.h>
- #include <math.h>
- #include <time.h>
- #include <windows.h>
-
- void main()
- {
- long t1,t2;//------------时间变量。
-
- char a[50000],b[50000];
- long c[100002];
- int i,j,k,l,m,s,kd,kf;
- register temp,n;//------寄存器变量,听说可以不这样定义。
- unsigned int seed; //-----------初始化随机函数的发生器
- // printf("输入第一个数:");
- // gets(a);//-----从屏幕输入一个大数。
- /// printf("输入第二个数::");
- // gets(b);//-----从屏幕输入一个大数。
-
-
-
-
-
-
- t1=GetTickCount();//时间计时开始;
-
- seed=time(0);//=======以下部分用来随机产生两个大数,共产生两个四
- srand(seed);//======万位的大整数。
- a[0]=2;
- for(kd = 1; kd <=40000; kd++)
- {
- a[kd]=rand();
- a[kd]=abs(a[kd]);
- a[kd]%=10;
- }
- b[0]=6;
- for(kf = 1; kf <=40000; kf++)
- {
- b[kf]=rand();
- b[kf]=abs(b[kf]);
- b[kf]%=10;
-
- }
-
- i=40001;//strlen(a);//计算输入数组中的数字位数。
- j=40001;//strlen(b);
- ////====================以上部分是随机产生两个四万位的大整数。
-
-
- // i=strlen(a);//计算输入数组中的数字位数。
- // j=strlen(b);
-
-
-
- for(s=0;s<=i+j-1;s++)//将数组C初始化,让C中的数置零。
- {
- c[s]=0;
- }
-
-
-
- for (k=0;k<=i-1;k++)//*以下就是乘法的核心部分,这是最垃圾最慢的乘法。
- // 这里的目的不是为了检验乘法算法的优劣。就
- //姑且用之吧*/
- {
- temp=a[k]-48;
- for (n=0;n<=j-1;n++)
- c[k+n]+=temp*(b[n]-48);//遍乘B中的各数。结果保存在C中。
- }
-
-
-
- for(l=i+j-1;l>=1 ;--l)//---------B
- { //---------------------------------B
- c[l-1]+=c[l]/10; //把C中的十位以上数字取出来,准备向前进位。B
- c[l]%=10; //-------------------------B
- }//--------------------------------------B
-
-
- for (m=0;m<=i+j-2;m++)//这两句是输出语句。把乘积的结果输出。
- printf("%d",c[m]);//输出语句。
-
- printf("\n");
-
- t2=GetTickCount();//程序段结束后取得系统运行时间(ms)。时间计时结束。
-
- printf("时间%d",t2-t1);
-
- }
复制代码 将程序中注有B的那五行用上,程序输出时间是13秒多(在我的机器上),而将程序中注有B的那五行去掉,程序输出的时间是16秒多。这是为什么? |
|