2021-11-02 B1026 简单的时间转换显示和将小数四舍五入

B1026 简单的时间转换显示和将小数四舍五入

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

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

输入样例:
123 4577973
结尾无空行
输出样例:
12:42:59
结尾无空行
题目大概意思就是给我们两个数C1和C2(C1<C2),我们将它们输入后用C2-C1就是相差的时间值S,但这时单位还不是秒,每100才为1秒,所以将S除以100即可,再分别得出小时数hh,分钟数mm和秒数ss,对应代码如下:

    ss=(int)S%60;
	hh=S/3600;
	mm=(int)S%3600/60;

需要注意的点:
一、将相差时间S换为以秒为单位时除以100后有小数,根据题目意思,不能舍去小数,所以S要设置为double类型
二、四舍五入的处理
我在S除以100后就将它四舍五入了(如果想放在将秒分离出来后处理也行),四舍五入的常用函数的格式为round(double x),返回值也为double型,需要对它进行取整,例如

#include<stdio.h>
#include<math.h>
int main(){
    double a=round(3.40);
    double b=round(3.50);
    printf("%d,%d\n",(int)a,(int)b);//输出的结果是3,4
    return 0;
}

别忘了加上#include<math.h>头文件才可以运行
三、printf输出格式设置
%0md可以使不足m位的int型变量以m位进行右对齐输出,高位用0补齐。
这里要求:运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出,所以只需要设置为

printf("%02d:%02d:%02d",hh,mm,ss);

四、千万注意,如果输入的C1、C2设置为int类型,那么在进行运算S=((double)C2-(double)C1)/100;这个时,要把C1、C2强制类型转换为double,否则即使S为double型,它得到的小数永远为0。
最后完整正确代码如下:

#include <iostream>
#include<math.h>
#include<stdio.h>
using namespace std;
int main()
{
	long long int C1;
	long long int C2;
	int hh,mm;
	int ss;
	double S;
	cin>>C1>>C2; 
	S=((double)C2-(double)C1)/100;																	
	//	printf("%.2f ", S);
	S=round(S);

    ss=(int)S%60;
	hh=S/3600;
	mm=(int)S%3600/60;
	
//	ss=round(ss);
	printf("%02d:%02d:%02d",hh,mm,ss);
	
	return 0;
} 

这次没有大佬文章链接啦,自己想的~查阅了算法笔记这本书。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值