如何优雅的将秒换算成-时:分:秒?

如何优雅的将秒换算成-时:分:秒?

思路

先看一下题目,发现就是一道模拟题,但是又一些细节的。

首先是数据的规模:时间不超过 10^18,所以需要开 long long。

然后首先要忽略掉毫秒。

这里普及一个知识:1s = 1000ms

所以需要忽略后面的三位。直接整除 1000 就可以了。

之后就是处理时分秒了:

1.小时

由于只是算一天,24 小时之内,所以要把完整的一天去掉,也就是把对每天的秒数取余,余数就是除了整天剩余的秒数,每天的秒数用24*60*60来表示(当然你也可以直接算出来结果是86400)。然后用最后一天剩余的秒数整除每小时的秒数60*60(也就是3600),就是小时值了。

2.分钟

分钟要先对每小时的秒数60*60取余,余数就是除了整小时以外剩余的秒数。之后整除 6060 就是剩余的秒数中整分钟的数,就是分钟值了。

3.秒

直接对60取余,剩下的就是秒了。

时间的处理就搞好了。下面就是输出了,题目要求时、分、秒不足两位时补前导 00。所以这是一个细节。

当然你可以用printf进行域宽的输出,但是我这里介绍一个用cin的方法。

要用到两个函数:

一个是setw()函数,这个函数可以限定域宽,宽度就是括号里的数字。

另外一个setfill()函数,这个函数可以设置当实际的宽度不足setw()函数的值时,用某个字符来补足。(setfill()函数最好放在setw()函数前面)

1
2
3
4
5
6
7
8
9
10
11
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,h,m,s;
cin>>n;
n=n/1000;
h=n%(24*3600)/3600;
m=n%3600/60;
s=n%60;
cout<<setfill('0')<<setw(2)<<h<<":"<<setfill('0')<<setw(2)<<m<<":"<<setfill('0')<<setw(2)<<s;
}

如何优雅的将秒换算成-时:分:秒?
https://bayeeaa.github.io/2024/04/18/秒转换时间/
Author
Ye
Posted on
April 18, 2024
Licensed under