[蓝桥杯 2021 省 B] 时间显示
题目描述
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入格式
输入一行包含一个整数,表示时间。
输出格式
输出时分秒表示的当前时间, 格式形如
H
H
:
M
M
:
S
S
\mathrm{HH}: \mathrm{MM}: \mathrm{SS}
HH:MM:SS, 其中
H
H
\mathrm{HH}
HH 表示时, 值 为
0
0
0 到
23
,
M
M
23, \mathrm{MM}
23,MM 表示分。值为
0
0
0 到
59
59
59。
S
S
\mathrm{SS}
SS 表示秒, 值为
0
0
0 到
59
59
59。时、分、秒不足两位时补前导 0
。
样例 #1
样例输入 #1
46800999
样例输出 #1
13:00:00
样例 #2
样例输入 #2
1618708103123
样例输出 #2
01:08:23
提示
对于所有评测用例, 给定的时间为不超过 1 0 18 10^{18} 1018 的正整数。
蓝桥杯 2021 第一轮省赛 B 组 F 题。
思路
首先,读取输入的毫秒数。然后,通过除以1000,将毫秒数转换为秒数。接着,利用模运算和整数除法,将秒数转换为时、分、秒的形式。这里的86400是一天中的秒数,3600是一小时的秒数,60是一分钟的秒数。通过这种方式,可以将总秒数分解为小时、分钟和秒。
最后,使用printf函数输出转换后的时间。这里的"%02d"格式化字符串表示输出的整数将占据两个字符的宽度,如果整数的位数不足两位,那么前面将使用0来填充。
AC代码
#include <algorithm>
#include <iostream>
#define mp make_pair
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;
const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;
int main() {
ll ts;
int h, m, s;
scanf("%lld", &ts);
// 毫秒数转秒数
ts /= 1000;
ts %= 86400;
h = ts / 3600;
ts %= 3600;
m = ts / 60;
ts %= 60;
s = ts % 60;
printf("%02d:%02d:%02d", h, m, s);
return 0;
}