[蓝桥杯 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;
}