PAT乙级.1026. 程序运行时间(15)

来源:互联网 发布:c#二维数组初始化 编辑:程序博客网 时间:2024/05/29 04:02

1026. 程序运行时间(15)


题目:

要获得一个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和C1。注意两次获得的时钟打点数肯定不相同,即C1 < C2,并且取值在[0, 10^7]。

输出格式:

在一行中输出被测函数运行的时间。运行时间必须按照“hh:mm:ss”(即2位的“时:分:秒”)格式输出;不足1秒的时间四舍五入到秒。

输入样例:

123 4577973

输出样例:

12:42:59

PAT链接


思路:
1.求(C2-C1)/100并四舍五入
2.获得hh,mm,ss并输出

    ss = Dif % 60;    mm = (Dif) / 60 % 60;    hh = Dif / 3600;

代码:

/** * @tag     PAT_B_1026 * @authors R11happy (xushuai100@126.com) * @date    2016-07-18 19:28:16-19:43 * @version 1.0 * @Language C++ * @Ranking  80/5481 */#include <cstdio>#include <cstring>#include <cmath>int main(){    int C1, C2;    int hh, mm, ss;    scanf("%d%d", &C1, &C2);    double ans = (C2 - C1) / 100.0; //注意要用100.0获得double类型    int Dif = (C2 - C1) / 100;    /*进行四舍五入*/    if (ans - Dif >= 0.5)        Dif++;    ss = Dif % 60;    mm = (Dif) / 60 % 60;    hh = Dif / 3600;    printf("%02d:%02d:%02d\n", hh, mm, ss); //输出注意两位补0    return 0;}

收获:

1.四舍五入可以用round函数,但是由于涉及浮点数会使写法变得复杂,因此不妨直接通过C2-C1的后两位来判断是四舍还是五入
这部分可改进成如下代码:

/*四舍五入部分*/if(ans % 100 >= 50)    ans = ans /100 +1;else    ans = ans / 100;

2.时间的输出要注意高位自动补零

printf("%02d:%02d:%02d\n", hh, mm, ss); //输出注意两位补0
0 0
原创粉丝点击