[蓝桥杯 2021 省 B] 时间显示
题目描述
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入格式
输入一行包含一个整数,表示时间。
输出格式
输出时分秒表示的当前时间, 格式形如
H
H
:
M
M
:
S
S
\mathrm{HH}: \mathrm{MM}: \mathrm{SS}
HH:MM:SS, 其中
H
H
\mathrm{HH}
HH 表示时, 值 为
0
0
0 到
23
,
M
M
23, \mathrm{MM}
23,MM 表示分。值为
0
0
0 到
59
59
59。
S
S
\mathrm{SS}
SS 表示秒, 值为
0
0
0 到
59
59
59。时、分、秒不足两位时补前导 0
。
样例 #1
样例输入 #1
46800999
样例输出 #1
13:00:00
样例 #2
样例输入 #2
1618708103123
样例输出 #2
01:08:23
提示
对于所有评测用例, 给定的时间为不超过 1 0 18 10^{18} 1018 的正整数。
蓝桥杯 2021 第一轮省赛 B 组 F 题。
所需变量
int i;//循环变量
int sum = 0;//代表总和
int shi;//代表时间的时
int fen;//代表时间的分钟
int miao;//代表时间的秒钟
string a;//代表读入的字符串,我觉得可能回溢出,所以我用字符串去接收
思路:我们首先从题意可知我们是不需要知道过去了多少天的,只需要知道当前时分秒!
因此我们可以大胆首先将后三位都不需要了(代表多少毫秒),然后将得到的总数对86400(246060)求余就得到过去了n天之后,还有多少时刻不满足一天,所以就得到今天的时间了!代码如下:
if(a.length()>3){
for(i = 0;i<a.length()-3;i++){
sum = (sum*10 + a[i] - 48)%86400;
}
}
得到今天的多少秒之后就是将其转换为多少时多少分多少秒!
代码如下:
if(sum == 0){
cout<<"00:00:00"<<endl;
}else{
shi = sum/3600;
sum = sum - shi*3600;
fen = sum/60;
sum = sum - fen*60;
miao = sum;
if(shi<10){
cout<<"0"<<shi<<":";
}else{
cout<<shi<<":";
}
if(fen<10){
cout<<"0"<<fen<<":";
}else{
cout<<fen<<":";
}
if(miao<10){
cout<<"0"<<miao<<endl;
}else{
cout<<miao<<endl;
}
}
将上面代码整合,得到的完整代码如下(编译器是dev,语言是C语言):
#include<iostream>
using namespace std;
#include<string.h>
int main(){
int i,sum = 0,shi,fen,miao;
string a;
cin>>a;
if(a.length()>3){
for(i = 0;i<a.length()-3;i++){
sum = (sum*10 + a[i] - 48)%86400;
}
}
if(sum == 0){
cout<<"00:00:00"<<endl;
}else{
shi = sum/3600;
sum = sum - shi*3600;
fen = sum/60;
sum = sum - fen*60;
miao = sum;
if(shi<10){
cout<<"0"<<shi<<":";
}else{
cout<<shi<<":";
}
if(fen<10){
cout<<"0"<<fen<<":";
}else{
cout<<fen<<":";
}
if(miao<10){
cout<<"0"<<miao<<endl;
}else{
cout<<miao<<endl;
}
}
return 0;
}