题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#include <iostream>
#include <cstdio>
using namespace std;
int p[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int Run(int k)
{
if((k%400==0)||((k%4==0)&&(k%100!=0)))return 1;
else return 0;
}
int main() {
int y,m,d,plus,n;
cin>>n;
while (cin >>y >> m >>d>>plus) {
int flag=0;
if(Run(y)==1)p[2]=29;
else p[2]=28;
for(int i=m;i<=12;i++)
{
if(plus+d-p[i]==0)
{
m=i;d=p[i];
flag=1;
break;
}
else if(plus+d-p[i]<0)
{
m=i;d=d+plus;
flag=1;
break;
}
plus-=p[i];
}
while((plus+d>0)&&flag==0){
y++;
if(Run(y)==1)p[2]=29;
else p[2]=28;
for(int i=1;i<=12;i++)
{
if(plus+d-p[i]==0)
{
m=i;d=p[i];
flag=1;
break;
}
else if(plus+d-p[i]<0){
m=i;d+=plus;
flag=1;
break;
}
plus-=p[i];
}
}
printf("%04d-%02d-%02d\n",y,m,d);
}
}
// 别忘了年份可能也会加
