(笔试题)程序运行时间
題目:
要獲得一個(gè)C語言程序的運(yùn)行時(shí)間,常用的方法是調(diào)用頭文件time.h,其中提供了clock()函數(shù),可以捕捉從程序開始運(yùn)行到clock()被調(diào)用時(shí)所
耗費(fèi)的時(shí)間。這個(gè)時(shí)間單位是clock tick,即“時(shí)鐘打點(diǎn)”。同時(shí)還有一個(gè)常數(shù)CLK_TCK,給出了機(jī)器時(shí)鐘每秒所走的時(shí)鐘打點(diǎn)數(shù)。于是為了獲
得一個(gè)函數(shù)f的運(yùn)行時(shí)間,我們只要在調(diào)用f之前先調(diào)用clock(),獲得一個(gè)時(shí)鐘打點(diǎn)數(shù)C1;在f執(zhí)行完成后再調(diào)用clock(),獲得另一個(gè)時(shí)鐘打點(diǎn)
數(shù)C2;兩次獲得的時(shí)鐘打點(diǎn)數(shù)之差(C2-C1)就是f運(yùn)行所消耗的時(shí)鐘打點(diǎn)數(shù),再除以常數(shù)CLK_TCK,就得到了以秒為單位的運(yùn)行時(shí)間。
這里不妨簡單假設(shè)常數(shù)CLK_TCK為100。現(xiàn)給定被測函數(shù)前后兩次獲得的時(shí)鐘打點(diǎn)數(shù),請你給出被測函數(shù)運(yùn)行的時(shí)間。?
輸入描述:
輸入在一行中順序給出2個(gè)整數(shù)C1和C1。注意兩次獲得的時(shí)鐘打點(diǎn)數(shù)肯定不相同,即C1 < C2,并且取值在[0, 107]輸出描述:
在一行中輸出被測函數(shù)運(yùn)行的時(shí)間。運(yùn)行時(shí)間必須按照“hh:mm:ss”(即2位的“時(shí):分:秒”)格式輸出;不足1秒的時(shí)間四舍五入到秒。輸入例子:
123 4577973輸出例子:
12:42:59思路:
很簡單的問題:
hour=tick/3600;
minute=tick%3600/60;
second=tick%60;
問題關(guān)鍵在于:
1、防止溢出,需要long long類型;
2、輸出的格式,hh:mm:ss,每個(gè)整數(shù)需要保留兩位有效數(shù)字;
C語言中:printf ("%02lld:%02lld:%02lld\n", hh, mm, ss);
C++中:cout<<setfill('0')<<setw(2)<<hour<<":"<<setfill('0')<<setw(2)<<minute<<":"<<setfill('0')<<setw(2)<<sec<<endl;
代碼:
#include<iostream> #include<iomanip> using namespace std; const int CLK_TK=100;int main(){long long start,end;long long duration;long long hour,minute,sec;while(cin>>start && cin>>end){duration=(end-start)/CLK_TK;hour=duration/3600;minute=duration%3600/60;sec=duration%60;cout<<setfill('0')<<setw(2)<<hour<<":"<<setfill('0')<<setw(2)<<minute<<":"<<setfill('0')<<setw(2)<<sec<<endl;}return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/AndyJee/p/4579149.html
總結(jié)
以上是生活随笔為你收集整理的(笔试题)程序运行时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零食推广活动
- 下一篇: java 网络(socket)