A28471. 时间跨越
填空题
较易
知识点
题目描述
时间跨越
题目描述
假设现在是 y年m月d日h时而k小时后是y'年 m'月d'日h'时,对于给定的y,m,d,h,k ,小杨想请你帮他计算出对应的y',m',d',h'是多少。
输入格式
输入包含五行,每行一个正整数,分别代表y,m,d,h,k 。
输出格式
输出四个正整数,代表y',m',d',h' 。
样例
2008
2
28
23
12008 2 29 0 数据范围
对于全部数据,保证有2000≤y≤3000,1≤m≤12 ,1≤d≤31,0≤h≤23,1≤k≤24。数据保证为合法时间。
提示
闰年判断规则
- 普通闰年:年份能被 4 整除,但不能被 100 整除。
- 世纪闰年:年份能被 400 整除。
满足以上任意一条规则的年份就是闰年,否则是平年。
参考答案
#include <iostream>
using namespace std;
int main() {
int y, m, d, h, k;
cin >> y >> m >> d >> h >> k;
h += k;
if (h >= 24) {
h -= 24;
d += 1;
int days = 0;
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
days = 31;
} else if (m == 4 || m == 6 || m == 9 || m == 11) {
days = 30;
} else if (m == 2) {
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
days = 29;
} else {
days = 28;
}
}
if (d > days) {
d -= days;
m += 1;
if (m > 12) {
m = 1;
y += 1;
}
}
}
cout << y << " " << m << " " << d << " " << h << "\n";
return 0;
}
上一题
下一题