题解
输出时间
1 条题解
-
0
P4262 输出时间(入门)
解题思路
这道题和"电影时长"一样,把总秒数拆成"时:分:秒"。区别有两点:
- 必须用 scanf 输入、printf 输出;
- 时、分、秒都要占满 2 位,不足 2 位前面补 0,比如 8 要写成 08。
换算三步走(以 29425 为例):
- 小时 h = 29425 / 3600 = 8。
- 去掉整小时剩下的秒数 = 29425 % 3600 = 625,分钟 m = 625 / 60 = 10。
- 秒 s = 625 % 60 = 25。
输出用 printf("%02d:%02d:%02d", h, m, s)。%02d 的意思是"这个数占 2 格,不够 2 格就在前面补 0"。比如 h=8 会输出 08,所以结果是 08:10:25,和样例一致。
边界情况:
- t 最小 20000、最大 100000,小时数最多 27,int 装得下。
- 如果某一项小于 10(比如分钟是 5),%02d 会自动补成 05,这正是题目要的格式。
- 注意 scanf 里 &t 的取地址符号不能少,否则程序会读错。
参考代码
// 用途:用scanf输入总秒数t,换算成时分秒后用printf按HH:MM:SS格式输出 #include <cstdio> using namespace std; int main() { int t; scanf("%d", &t); int h = t / 3600; // 小时:总秒数除以3600 int m = t % 3600 / 60; // 分钟:去掉整小时后除以60 int s = t % 60; // 秒:最后的余数 printf("%02d:%02d:%02d\n", h, m, s); // %02d表示占2位,不够补0 return 0; }复杂度分析
只做固定几次除法和取余,然后一次 printf 输出,时间复杂度 O(1),额外空间 O(1)。t 最大 100000,所有中间结果都不超过 100000,用 int 完全够,不存在溢出风险。
- 1