A96437.日期平移
2026-01-17 20:17:12
发布于:浙江
19阅读
0回复
0点赞
#include<bits/stdc++.h>//用万能头文件是一个好习惯
#define ll long long//初学者不用写
using namespace std;//命名空间
ll may[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//初始化月份数组
int main(){//主函数
ios::sync_with_stdio(false);//初学者只要知道这叫输入输出保底
cin.tie(0);
cout.tie(0);
ll y,m,d,q;//定义
cin>>y>>m>>d>>q;//按题意输入
while(q--){//q次循环
ll op,x;//定义
cin>>op>>x;//输入
if(op==1){//未来的情况
d+=x;
}
else{//过去的情况
d-=x;
}
}
if(y%4==0&&y%100!=0||y%400==0){//年份判断,判断年份是否为闰年,后文不再解释
may[2]=29;//更改2月天数
}
while(d>may[m]){//最后多出来的情况
d-=may[m];//先正常日减少
m++;//后月份增加
while(m>12){//"进年"情况
y++;
m-=12;
}
may[2]=28;//年份变时这个会变,所以要初始化
if(y%4==0&&y%100!=0||y%400==0){
may[2]=29;
}
}
while(d<=0){//最后还少的情况
m--;//反之,先月份增加,后正常日减少
d+=may[m];
while(m<=0){//"借年"情况
y--;
m+=13;//易错点!!!!!!!!!!!!!!!!!!!
}
may[2]=28;//同上
if(y%4==0&&y%100!=0||y%400==0){
may[2]=29;
}
}
cout<<y<<" "<<m<<" "<<d;//输出
return 0;//好习惯
}
这里空空如也






有帮助,赞一个