题解
电影时长
1 条题解
-
0
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