题目描述
小蓝要和朋友合作开发一个时间显示的网站。
在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入描述
输入一行包含一个整数,表示时间。
输出描述
输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值为 0 到 23,MM 表示分,值为 0 到 59,SS 表示秒,值为 0 到 59。时、分、秒 不足两位时补前导 0。
实现代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long ms;
cin>>ms;
int HH=0,MM=0,SS=0;
HH=(ms/1000)/3600%24;
MM=(ms/1000)%3600/60;
SS=(ms/1000)%3600%60;
cout<<setw(2)<<setfill('0')<<HH<<":";
cout<<setw(2)<<setfill('0')<<MM<<":";
cout<<setw(2)<<setfill('0')<<SS<<endl;
}
解题思路
输入毫秒数,然后再算。首先先把毫秒换成秒,把它除以1000,也就是 (ms/1000)
,因为 1 小时等于 3600 秒,HH 在计算的时候直接除 3600,得到的结果再模 24,因为小时数小于 24。MM 也一样,毫秒变秒之后模 3600,得到相对于 1 小时多出来的秒数,再除以 60,得到分钟数。SS 相似,毫秒变秒之后模 3600,得到相对于 1 小时多出来的秒数,再模 60,得到相对于 1 分钟多出来的秒数,就可以解决,之后根据格式输出。
注意点
注意计算小时的时候要模 24,不然输入的数大的时候会算出超级大的结果。
知识点
- C++ 输出特定整数位数:代码
cout << setw(10) << setfill('0') << test << " ";
的意思是输出的整数有 10 位,不足 10 位就在前面补 0 。参考文章 [杂谈] 4. C++按指定的位数输出。