牛客网_PAT乙级_1016程序运行时间(15)
心得
格式化輸出的語法是這樣的:printf("%02d:%02d:%02d", hour, min, sec);
輸出效果舉個例子:00:04:59,不足兩位的情況下補0
不知道cout如何也能實現這樣輸出?
題目描述
要獲得一個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, 107]
輸出描述:
在一行中輸出被測函數運行的時間。運行時間必須按照“hh:mm:ss”(即2位的“時:分:秒”)格式輸出;不足1秒的時間四舍五入到秒。
輸入例子:
123 4577973
輸出例子:
12:42:59
別人的代碼
原來可以這么簡單
#include<bits/stdc++.h> int main(){int f,s;scanf("%d%d",&f,&s);int t=floor((s-f)/100.0+0.5);printf("%02d:%02d:%02d\n",t/3600,t%3600/60,t%60);return 0; }我的代碼
雖然一次通過,但是…太復雜了
#include<iostream> #define CLK_TCK 100 using namespace std; int main() {double c1, c2;double dif;long int totalSec;cin >> c1 >> c2;dif = (c2 - c1) / CLK_TCK;totalSec = (long int)(dif + 0.5);//四舍五入int hour;int min;int sec;int t;cout.width(2);if (totalSec >= 60 * 60){hour = totalSec / (60 * 60);min = totalSec - hour * 60 * 60;t = min;min = min / 60;sec = t - 60 * min;printf("%02d:%02d:%02d", hour, min, sec);}else if (totalSec >= 60){min = totalSec / 60;sec = totalSec - min * 60;printf("00:%02d:%02d", min, sec);}else{printf("00:00:%02d", totalSec);}system("pause"); }總結
以上是生活随笔為你收集整理的牛客网_PAT乙级_1016程序运行时间(15)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客网_PAT乙级_1015反转链表 (
- 下一篇: 牛客网_PAT乙级_1017打印沙漏(2