服务中心网站建设意见/网站自建
[蓝桥杯 2021 省 B] 时间显示
题目描述
小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要 显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入格式
输入一行包含一个整数,表示时间。
输出格式
输出时分秒表示的当前时间, 格式形如 HH:MM:SS\mathrm{HH}: \mathrm{MM}: \mathrm{SS}HH:MM:SS, 其中 HH\mathrm{HH}HH 表示时, 值 为 000 到 23,MM23, \mathrm{MM}23,MM 表示分。值为 000 到 595959。SS\mathrm{SS}SS 表示秒, 值为 000 到 595959。时、分、秒不足两位时补前导 0
。
样例 #1
样例输入 #1
46800999
样例输出 #1
13:00:00
样例 #2
样例输入 #2
1618708103123
样例输出 #2
01:08:23
提示
对于所有评测用例, 给定的时间为不超过 101810^{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;
}