P8748 [蓝桥杯 2021 省 B] 时间显示

题目链接: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类型.

long long的最大值:()9223372036854775807(>

%02d:默认情况下,数据数据宽度不够2位是用空格填补的,但是因为2d前面有0,这表示,数据宽度不足时用0填补,如%03d输出 12,那么实际输出到屏幕的是012.

实在不行,就暴力判断输出.(if+ else)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值