错误的程序之阶乘之和测试程序的快慢程度(加一个计时器)<time.h>和clock()函数

#include <stdio.h>
int main(){
	int i,j,n;
	int  s=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		int factorial=1.0;
		for(j=1;j<=i;j++){
			factorial*=j;
		}
		s+=factorial;
	}
	printf("%d\n",s%1000000);
	return 0;
}

1当n为100时输出的是一个负值说明乘法溢出了

2当n为10^6时速度很慢

3使用<time.h>和clock()函数可以在程序调用它之前获得整个程序的运行时间,这个时间除以常数CLOCKS_PER_SEC得到的值

#include <stdio.h>
#include <time.h> 
int main(){
	const int MOD=1000000;
	int i,j,n;
	int  s=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		int factorial=1.0;
		for(j=1;j<=i;j++){
			factorial*=j;
		}
		s+=factorial;
		printf("%d\n",s);
	}
	s=s%MOD;
	printf("%d\n",s);
	printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC);
	return 0;
}

注意:1上面的程序使用了常量定义,增加了程序的可读性,而且当题目该为求后5位的时候也方便修改

2输入20时候所用时间远远大于0是因为它把键盘输入的时间也计算在内(在程序启动之后所用的时间)

3为了避免时间影响测试结果我们使用一种称为管道的小技巧:在WINDOWS命令行下执行echo 20 | abs,操作系统会自动帮你把20输入,其中abs就是你的程序名

而Linux中则需要输入echo | /abs(具体abs旁边的不是/)(应为打不出来所以用了这个),因为在默认情况下当前目录不在可执行文件的搜索路线中

4很多程序的运行时间与规模n都存在着近似的简单关系。可以通过计是函数来发现或者验证这一规律




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值