题目链接:https://www.luogu.com.cn/problem/P8748
题目描述
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入格式
输入一行包含一个整数,表示时间。
输出格式
输出时分秒表示的当前时间, 格式形如HH:MM:SS, 其中 HH表示时, 值 为 0到 23, MM 表示分,值为 0 到 59。SS表示秒, 值为 0 到 59。时、分、秒不足两位时补前导 0 。
输入输出样例
样例 1
样例输入
46800999
样例输出
13:00:00
样例 2
样例输入
1618708103123
样例输出
01:08:23
提示
对于所有评测用例, 给定的时间为不超过 的正整数。
蓝桥杯 2021 第一轮省赛 B 组 F 题。
思路
值很大(
),用long long int
s=1000ms,毫秒舍去;不考虑时间到哪一天,直接取余求出时分秒即可
秒到分进制为60,分到时进制为60,求出相应即可
h = t1 / 3600;
m = (t1 - 3600 * h) / 60;
s = t1 - 3600 * h - 60 * m;
输出的表示:自动补位
printf("%02d:%02d:%02d\n", h, m, s);
判断暴力输出
if (h < 10)
cout << "0" << h << ":";
else
cout << h << ":";
if (m < 10)
cout << "0" << m << ":";
else
cout << m << ":";
if (s < 10)
cout << "0" << s << endl;
else
cout << s << endl;
解题代码
#include <iostream>
using namespace std;
int main() {
long long t;
cin >> t;
long long t0 = t / 1000;
long long t1 = t0 % (24 * 60 * 60);
int h, m, s;
h = t1 / 3600;
m = (t1 - 3600 * h) / 60;
s = t1 - 3600 * h - 60 * m;
//printf("%02d:%02d:%02d\n", h, m, s);
if (h < 10)
cout << "0" << h << ":";
else
cout << h << ":";
if (m < 10)
cout << "0" << m << ":";
else
cout << m << ":";
if (s < 10)
cout << "0" << s << endl;
else
cout << s << endl;
return 0;
}
注意
给定的时间最大为 long long的最大值:( |
%02d:默认情况下,数据数据宽度不够2位是用空格填补的,但是因为2d前面有0,这表示,数据宽度不足时用0填补,如%03d输出 12,那么实际输出到屏幕的是012. 实在不行,就暴力判断输出.(if+ else) |