时间显示 - 蓝桥云课 (lanqiao.cn)
题目描述
题目分析
输入为毫秒,故我们可以先将毫秒转化为秒,由于只需要输出时分,我们只需要将天数去除即可,可以在这里多训练一次天数判断
#include<bits/stdc++.h>
using namespace std;
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_ren(int n)
{
if((n % 100 != 0 && n % 4 == 0) || n % 400 == 0)return true;
return false;
}
int main()
{
long long x;
cin >> x;
x /= 1000;
//一天有24 * 60 * 60 = 86400 秒
bool flag = 0;
for(int i = 1970; ; i ++)
{
if(is_ren(i))m[2] = 29;
else m[2] = 28;
for(int j = 1; j <= 12; j ++)
{
for(int k = 1; k <= m[j]; k ++)
{
if(x >= 86400)
{
k ++;
x -= 86400;
}
else
{
flag = 1;
break;
}
}
if(flag)break;
}
if(flag)break;
}
int a = x / 3600;
int b = x % 3600 / 60;
int c = x % 60;
printf("%02d:%02d:%02d", a, b, c);
return 0;
}
但显然没必要,可以这样
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long x;
cin >> x;
x /= 1000;
//一天有24 * 60 * 60 = 86400 秒
while(x >= 86400)x -= 86400;
int a = x / 3600;
int b = x % 3600 / 60;
int c = x % 60;
printf("%02d:%02d:%02d", a, b, c);
return 0;
}