P8748 题解
lichenzhen · · 题解
思路
先看一下题目,发现就是一道模拟题,但是又一些细节的。
首先是数据的规模:时间不超过
然后首先要忽略掉毫秒。
这里普及一个知识:
所以需要忽略后面的三位。直接整除
之后就是处理时分秒了:
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;
}