PAT B1026. 程序运行时间

题目描述
要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK——给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,只要在调用 f 之前先调用 clock(),获得一个时钟打点数C1;在 f 执行完成后再调用clock(),获得另一个时钟打点数C2;两次获得的时钟之差(C2-C1)就是 f 运行所消耗的时钟打点数,再除以常数CLK_TCK,就得到了以s为单位的运行时间。这里不妨简单假设常数CLK_TCK为100。现给定被测函数前后两次获得的时钟打点数,请给出被测函数运行的时间。


输入格式
在一行中顺序输入2个整数C1和C1。注意:两次获得的时钟打点数肯定不相同即C1<C2,并且取值在[0,10^{7}]。
输出格式
在一行中输出被测函数运行的时间。运行时间必须按照"hh:mm:ss”(即2位的时:分:秒”)格式输出;不足1s的时间四舍五入到s。

(做法一)思路:

                        将打点数转化为总秒数,然后分别计算小时,分钟,秒数。

                        注意点:①转化为总秒数时,不要设置为int类型,不然后面小数会直接省掉,而题目要求四舍五入。

                        ②调用math.h中的round(int x)进行四舍五入。

(做法一)代码实现:

#include<cstdio>
#include<cmath>  //需要用“四舍五入”函数:double round(double x); 

int main()
{
	float c1,c2;
	scanf("%f%f",&c1,&c2);
	float a = (c2 - c1) / 100;  //总秒数 //c1,c2为float类型,不能为int类型,否则“/100”,int直接将后面的小数去掉了,而题目要求四舍五入  
	
	int h,m,s;  //时,分,秒 

	h = a / 3600;
	m = (a - h * 3600) / 60;  
	s = round(a - h *3600 - m * 60);  //round返回值是double类型,而s是int类型,进行了强制转换 
	
	printf("%02d:%02d:%02d\n",h,m,s);
	
	return 0;
} 

(做法二)思路:

                        步骤1:先求出C2-C1,而由于1s等价于100CLK_TCK,因此换算成“s”单位时要将C2-C1除以100,又由于需要四舍五入,因此需要根据C2-C1的末两位来决定是四舍还是五入,其中当C2-C1的末两位不小于50时,说明C2-C1除以100后需要进位。

为了Step 2讲述方便,这里设ans为(C2-C1)/100四舍五入的结果。
                        步骤2:由于1h=3600s,因此 ans /3600即为小时数。于是,ans % 3600是去除小时数后剩余的部分,这个部分除以60即为分钟数,模上60即为秒数。

(做法二)代码实现:

#include<cstdio>


int main()
{
	int c1,c2;
	scanf("%d%d",&c1,&c2);
	int ans = c2 - c1;   //ans这里表示打点总次数 
	if(ans % 100 >= 50)   //四舍五入 
	{
		ans = ans / 100 + 1;	//这里ans表示“五入”后的总秒数 
	} else{
		ans = ans / 100;     //这里ans表示“四舍”后的总秒数 
	}
	
	printf("%02d:%02d:%02d\n", ans / 3600, ans % 3600 / 60, ans %60 );
	
	return 0;
} 

附加:

程序运行时间:clock()函数的使用

#include<cstdio>
#include<time.h>

int main()
{
	int n1 = clock();
	int c1,c2;
	scanf("%d%d",&c1,&c2);
	int ans = c2 - c1;   //ans这里表示打点总次数 
	if(ans % 100 >= 50)   //四舍五入 
	{
		ans = ans / 100 + 1;	//这里ans表示“五入”后的总秒数 
	} else{
		ans = ans / 100;     //这里ans表示“四舍”后的总秒数 
	}
	
	printf("%02d:%02d:%02d\n", ans / 3600, ans % 3600 / 60, ans %60 );
	
	int n2 = clock();
	printf("%d",(n2-n1)/CLK_TCK);
	return 0;
} 

结果:

第3行的9就是我此次运行程序的时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行走__Wz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值