#include <stdio.h>
typedef struct date{
int year;
int month;
int day;
}dy;
int mon[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
int istrue(dy startdate);
void add(dy startdate, int days, dy* end);
int isrunyear(int y);
int main(){
dy startdate, enddate, *end;
int days;
end = &enddate;
do{
scanf("%d %d %d", &startdate.year, &startdate.month, &startdate.day);
scanf("%d", &days);
}while(!(istrue(startdate))&&(days >= 0));
add(startdate, days, end);
printf("%d %d %d", end->year, end->month, end->day);
}
int isrunyear(int y){
if( ((y%40)&&(y%100!=0))|| (y%4000))
return 1;
else
return 0;
}
int istrue(dy startdate){
int y, m, d;
int tday;
y = startdate.year;
m = startdate.month;
d = startdate.day;
if(y < 0)
return 0;
if(m < 1 || m > 12)
return 0;
if(isrunyear(y)){
tday = mon[m];
if(m == 2){
tday++;
}
if(d >= 0 && d <= tday)
return 1;
else
return 0;
}
else{
tday = mon[m];
if(d >= 0 && d <= tday)
return 1;
else
return 0;
}
}
void add(dy startdate, int days, dy* end){
int y,m,d;
int i, tday;
y = startdate.year;
m = startdate.month;
d = startdate.day;
for( i = 1; i <= days; i++){
tday = mon[m];
if((m == 2) && (isrunyear(y)) ){
tday++;
}
if(d % tday == 0){
if(m == 12){
y++;
m = 1;
d = 1;
}else{
m++;
d = 1;
}
}else{
d++;
}
}
end->year = y;
end->month = m;
end->day = d;
}
输入
年 月 日 天