1 条题解
-
0
自动搬运
来自洛谷,原作者为

lichenzhen
这个人已经AFO了搬运于
2025-08-24 22:42:03,当前版本为作者最后更新于2022-12-20 23:12:44,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路
先看一下题目,发现就是一道模拟题,但是又一些细节的。
首先是数据的规模:时间不超过 ,所以需要开 long long。
然后首先要忽略掉毫秒。
这里普及一个知识: =
所以需要忽略后面的三位。直接整除 就可以了。
之后就是处理时分秒了:
1.小时
由于只是算一天, 小时之内,所以要把完整的一天去掉,也就是把对每天的秒数取余,余数就是除了整天剩余的秒数,每天的秒数用
24*60*60来表示(当然你也可以直接算出来结果是 )。然后用最后一天剩余的秒数整除每小时的秒数60*60(也就是 ),就是小时值了。2.分钟
分钟要先对每小时的秒数
60*60取余,余数就是除了整小时以外剩余的秒数。之后整除 就是剩余的秒数中整分钟的数,就是分钟值了。3.秒
直接对60取余,剩下的就是秒了。
时间的处理就搞好了。下面就是输出了,题目要求时、分、秒不足两位时补前导 。所以这是一个细节。
当然你可以用printf进行域宽的输出,但是我这里介绍一个用cin的方法。
要用到两个函数:
一个是
setw()函数,这个函数可以限定域宽,宽度就是括号里的数字。另外一个
setfill()函数,这个函数可以设置当实际的宽度不足setw()函数的值时,用某个字符来补足。(setfill()函数最好放在setw()函数前面)这样就可以了。
参考代码
#include<bits/stdc++.h> using namespace std; int main() { long long t,hh,mm,ss; cin>>t; t/=1000; hh=t%(24*60*60)/(60*60);//时 mm=t%(60*60)/60;//分 ss=t%60;//秒 cout<<setfill('0')<<setw(2)<<hh<<setfill('0')<<setw(2)<<mm<<setfill('0')<<setw(2)<<ss; //注意setfill()函数内的值是字符,要加单引号。 return 0; }
- 1
信息
- ID
- 7926
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者