top1编程
← 返回题目
题解

电影时长

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4219 电影时长(入门)

    解题思路

    时间换算就像把一堆零钱换成整钱。记住两个换算关系:1 小时 = 3600 秒,1 分钟 = 60 秒。

    把 n 秒换算成"时:分:秒"分三步走:

    • 小时 h = n / 3600,看看能装满几个 3600 秒的大盒子。比如 8316 / 3600 = 2(整除),就是 2 小时。
    • 剩下的秒数 = n % 3600 = 8316 % 3600 = 1116 秒,再除以 60 得到分钟 m = 1116 / 60 = 18。
    • 最后剩下的 s = n % 60 = 1116 % 60 = 36 秒。

    所以 8316 秒 = 2:18:36,和样例一致。

    边界情况:

    • n 最小 5000,能算出 1 小时;就算 n 小到不足 3600,h 会是 0,输出 0:xx:xx 也符合格式。
    • n 最大 10000,小时数不到 3,用 int 存绰绰有余。
    • 顺序不能换:m 必须先取余 3600 再除以 60,直接 n/60 会算错分钟。

    参考代码

    // 用途:把电影时长n秒换算成"时:分:秒"的格式并输出
    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        int h = n / 3600;        // 1小时=3600秒,先算整小时
        int m = n % 3600 / 60;   // 去掉整小时后的秒数除以60得分钟
        int s = n % 60;          // 余下的就是秒
        cout << h << ":" << m << ":" << s << endl;
        return 0;
    }
    

    复杂度分析

    只做三次整数除法或取余运算,和 n 的大小无关,时间复杂度 O(1),额外空间 O(1)。n 最大 10000,小时数最多 2,所有中间结果都远小于 int 的上限(约 21 亿),不会溢出。

    • 1