53 求n天后的日期
作者: Turbo时间限制: 2S章节: 函数
问题描述 :
写一个函数,传入年月日,计算它的第二天,并返回该日期。由用户输入年月日和一个n值,使用前述函数,计算该日期加n天的日期为多少。
输入说明 :
输入year,month,day和n共4个正整数,以空格分隔。n的值不超过2000。
输出说明 :
输出计算得到的结果年月日共3个正整数,整数之间以一个空格分隔,行首与行尾无多余空格。
输入范例 :
2000 1 1 366
输出范例 :
2001 1 1
#include<stdio.h>
int next(int *y,int *m,int *d);
int main(){
int y,m,d,n;
scanf("%d%d%d%d",&y,&m,&d,&n);
while(n--)
next(&y,&m,&d);
printf("%d %d %d",y,m,d);
return 0;
}
int next(int *y,int *m,int *d){
if(((*y)%4==0&&(*y)%100!=0)||((*y)%400==0)){
if((*m)==2) {
if((*d)+1>29){
(*m)+=1;
if((*m)>12) {(*y)+=1; (*m)=1;}
(*d)=1;
}else (*d)++;
}else if((*m)==1||(*m)==3||(*m)==5||(*m)==7||(*m)==8||(*m)==10||(*m)==12){
if((*d)+1>31){
(*m)+=1;
if((*m)>12) {(*y)+=1; (*m)=1;}
(*d)=1;
}else (*d)++;
}else{
if((*d)+1>30){
(*m)+=1;
if((*m)>12){(*y)+=1; (*m)=1;}
(*d)=1;
}else (*d)++;
}
}else{
if((*m)==2) {
if((*d)+1>28){
(*m)+=1;
if((*m)>12) {(*y)+=1; (*m)=1;}
(*d)=1;
}else (*d)++;
}else if((*m)==1||(*m)==3||(*m)==5||(*m)==7||(*m)==8||(*m)==10||(*m)==12){
if((*d)+1>31){
(*m)+=1;
if((*m)>12) {(*y)+=1; (*m)=1;}
(*d)=1;
}else (*d)++;
}else{
if((*d)+1>30){
(*m)+=1;
if((*m)>12){(*y)+=1; (*m)=1;}
(*d)=1;
}else (*d)++;
}
}
}