试题题目:
本题为编程题
解题思路:
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
int、short、long、longlong,测评用例指出数据不超过
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;
}