第十二届蓝桥杯省赛 C/C++大学B组 试题F:时间显示

试题题目
在这里插入图片描述

本题为编程题
解题思路:

1、思考
   本题其实较为简单,编程题第一题。就是数值“除法运算”和“取余运算”。那么值得注意的是:测评用例中的数值范围。
   C C C语言整型数据,通常包括有四种数据类型, i n t 、 s h o r t 、 l o n g 、 l o n g l o n g int、short、long、long long intshortlonglonglong,测评用例指出数据不超过 10 10 1018的正整数,及最大数为 17 17 17 9 9 9。根据 C C C语言知识, l o n g l o n g long long longlong数据类型的的数值范围为- 2 2 263 ~ 2 2 263- 1 1 1,即 − 9223372036854775808 -9223372036854775808 9223372036854775808 ~ 9223372036854775807 9223372036854775807 9223372036854775807,说明 l o n g l o n g long long longlong数据类型足够本题使用。 l o n g l o n g long long longlong数据类型的打印类型为% l l d lld lld

2、解题过程
   由题意,输入的数值是毫秒数,需要将毫秒数转为秒数, 1 s = 1000 m s 1s=1000ms 1s=1000ms,那么需要对输入的数值除以 1000 1000 1000获得秒数。我们知道一整天 24 24 24小时等于 86400 86400 86400秒;一小时等于 3600 3600 3600秒;一分钟等于 60 60 60秒。本题目要求输出的只是时、分、秒,无需输出天数,甚至是难度系数较大的日期等。
   秒数经过 86400 86400 86400秒一个轮回,再一次从 00 : 00 : 00 00:00:00 00:00:00开始计时。那么秒数对86400取余,即可获得最后一次从 00 : 00 : 00 00:00:00 00:00:00开始计时的秒数值,这个值是非常重要的中间值。
   该中间值除以3600即可获得 “ “ 小时数 ” ” 。中间值对 3600 3600 3600取余后再除以 60 60 60即可获得 “ “ 分钟数 ” ” 。中间值直接对60取余即可获得 “ “ 秒钟数 ” ”
   打印输出时,需要分别打印,因为不足两位数时需要补 0 0 0
我的个人题解 C C C语言代码如下,可参考或可优化:

#include<stdio.h>
#define days 86400       //一天86400秒 
#define hours 3600       //一小时3600秒 
#define mins 60          //一分钟60秒 
int main()
{
	long long msNum,sNum,dNum; 
	scanf("%lld",&msNum);
	sNum = msNum/1000; 
	dNum = sNum%days; 
	
	int numHour,numMin,numSecond;  
    numHour = dNum/hours;
	numMin = (dNum%hours)/mins;
	numSecond = dNum%60;
	
	
	if(numHour<10){ printf("0");}
	printf("%d:",numHour);
	if(numMin<10){ printf("0");}
	printf("%d:",numMin);
	if(numSecond<10){ printf("0");}
	printf("%d",numSecond);

	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值