要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C2;两次获得的时钟打点数之差 (C2-C1) 就是 f 运行所消耗的时钟打点数,再除以常数 CLK_TCK,就得到了以秒为单位的运行时间。
这里不妨简单假设常数 CLK_TCK 为 100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。
输入格式:
输入在一行中顺序给出 2 个整数 C1 和 C2。注意两次获得的时钟打点数肯定不相同,即 C1 < C2,并且取值在 [0,107]。
输出格式:
在一行中输出被测函数运行的时间。运行时间必须按照 hh:mm:ss
(即2位的 时:分:秒
)格式输出;不足 1 秒的时间四舍五入到秒。
输入样例:
123 4577973
结尾无空行
输出样例:
12:42:59
结尾无空行
解题思路:题目难度不大,是平常的数学问题,但是问题就出现在不足进位这里,在不足进位的情况下,需要先将原来的数加50以为除数是100,所以加50就可以将原数中大于50的在除以50的数在之后保留下来,这是柳神的题解中学到的解法,感谢柳神,之后通过除数和取余处理结果就可以了,另外需要考虑的一个点是要对输出尽心处理,通过printf(%02d)可以对未满俩位的数往高位补零这和很重要,但是我发现一个测试点,感觉不知道是测试点的问题还是我的猜想错了,题目上说输出的时分秒都是俩位,但是小时位会有3位数的情况在自己的环境测试后也是如此,欢迎大家一起测试看一下,下面是我的测试结过:
测试前:
测试后:
//假设CLK_TCK为100,现在给定测函数前后俩次获得的时钟打点数,在输入中给出C1和C2俩个整数,俩个整数一定不同,不足1秒四舍五入到秒x
//在处理的时候需要先对进位进行处理,因为在除以100之后会有余数,在c++中整数相除会直接舍去小数部分
//代码开始
#include<iostream>
using namespace std;
int main()
{
int number1 = 0, number2 = 0;
cin >> number1 >> number2;
int middle = ((number2 - number1) + 50) / 100;//这里是为了保证在4舍五入之后的进位
int hour = middle / 3600;//计算小时数
middle = middle % 3600;
int min = middle / 60;//计算分钟数
int second = middle % 60;//计算秒数
printf("%02d:%02d:%02d\n",hour,min,second);//这里有小细节需要注意,在输出时要考虑不足俩位时要补0所以用print输出用%02d格式
return 0;
}