题目描述
“人生最苦之事莫过于明知要失去,但是却还没发生。”——基兰
废墟之地,曾经有一座恢宏的城池,很久以前在一场可怕的符文战争中灰飞烟灭,就像宏伟屏障之下的大多数陆地一样。
尽管如此,还是有一个人生还了下来:一名叫做基兰的魔法师。对于他这样一个时光痴迷者来说,住在城市的钟塔之中是再合适不过了。
现在他在精神上漂浮于时间中,思考未来之事。
他知道一个时间点,以及多个时间间隔(天),他想知道经过这些时间间隔之后的时间点。
输入
第一行输入T,表示数据组数
第二行输入一个日期 yyyy-mm-dd
对于 每组数据,输入一个时间间隔 t
输出
每组输出经过t天后的日期,以yyyy-mm-dd的格式
每组数据一行
样例输入
2
1777-4-30
5343
8113
样例输出
1791-12-16
1799-07-17
#include<stdio.h>
int l[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int leap(int y){
if((y%4==0&&y%100!=0)||(y%400)==0){
return 1;
}
return 0;
}
int main(){
int n,y,m,d,a,b,c;
scanf("%d",&n);
scanf("%d-%d-%d",&y,&m,&d);
a=y;b=m;c=d;
while(n>0){//多次输入
y=a;m=b;d=c;
int t;
scanf("%d",&t);
while(t>0){//当还有天剩余
if(t>=366){//剩余天数比一年多
if(leap(y+1)==1&&m>=3||leap(y)==1&&m<3){
t-=366;
}
else t-=365;
y++;
}
else if(t>31){//剩余天数比一年少且大于一个月
t-=l[m];m++;
if(leap(y)==1&&m==3){t-=1;}
if(m==13){
y++;m-=12;
}
}
else{//剩余天数不一定大于一个月
d=d+t;
t=0;
if(leap(y)==1){
l[2]=29;//闰年2月29天
}
while(d>l[m]){
d-=l[m];
m++;
if(m==13){
y++;m-=12;
}
}
l[2]=28;//这里很重要,我就没有然后一直过不了,如果没有,之后的年若是平年,2月也变成29天了,就错了
}
}
printf("%04d-%02d-%02d\n",y,m,d);
n--;
}
}