[GESP 202503 二级 T2] 时间跨越
描述
假设现在是 yy 年 mm 月 dd 日 hh 时而 kk 小时后是 y'y′ 年 m'm′ 月 d'd′ 日 h'h′ 时,对于给定的 y, m, d, h, ky,m,d,h,k,小杨想请你帮他计算出对应的 y', m', d', h'y′,m′,d′,h′ 是多少。
输入描述
输入包含五行,每行一个正整数,分别代表 y, m, d, h, ky,m,d,h,k。
输出描述
输出四个正整数,代表 y', m', d', h'y′,m′,d′,h′。
输入输出样例
输入样例 1复制
2008
2
28
23
1
输出样例 1复制
2008 2 29 0
提示
对于全部数据,保证有 2000 \leq y \leq 30002000≤y≤3000,1 \leq m \leq 121≤m≤12,1 \leq d \leq 311≤d≤31,0 \leq h \leq 230≤h≤23,1 \leq k \leq 241≤k≤24。数据保证为合法时间。
闰年判断规则
-
普通闰年:年份能被 44 整除,但不能被 100100 整除。
-
世纪闰年:年份能被 400400 整除。
满足以上任意一条规则的年份就是闰年,否则是平年。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int y,m,d,h,k,dd;
cin>>y>>m>>d>>h>>k;
h+=k;
if(h>=24){
d++;
h%=24;
}if(m==2){
if (y%400==0 || y%4==0 && y%100!=0) {
dd=29;
}else{
dd=28;
}
}else if(m==4 || m==6 || m==9 || m==11){
dd=30;
}else{
dd=31;
}if(d>dd){
d=1;
m++;
}if(m>12){
m=1;
y++;
}
cout<<y<<" "<<m<<" "<<d<<" "<< h;
return 0;
}
以上内容均为原创;欢迎参考、借鉴!
但拒绝盗版;也禁止任何人在未经本人同意的条件下用于商业用途。
作者保留法律追究责任。