您的位置:首页 > 编程语言 > C语言/C++

计算某个日期起N天后的日期(C语言递归实现)

2016-04-18 22:02 381 查看

思路

假设起始日期是当月1日

1. N小于当月天数,则年份月份 不变,天数直接加上N,程序结束。

2. 若N大于等于当月天数,且当前月份为12月,年份加1,月份重置为1,否则,年份不变,月份加1。

3. 以更新后的日期和剩余的天数为输入,重复步骤1,2.

#include <stdio.h>
struct Date {
int year;
int month;
int day;
};
/***
*返回值 日期
*date 起始日期
*N
***/
Date& whichDate(Date& date, int days){
//将起始日期转化为当前月份的第一天
days += (date.day -1);
date.day = 1;

//计算当前月份天数
int day = 0;
switch(date.month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
if((date.year % 4 == 0 && date.year % 100 !=0) || date.year % 400 == 0){
day = 29;
}
else {
day = 28;
}
break;
}
//更新日期和总天数
if (days - day >= 0)
{
if (date.month == 12)
{
date.year += 1;
date.month = 1;
}
else{
date.month += 1;
}
return whichDate(date,days-day);//递归

}
else {
date.day += days;
}
return date;
}

void main()
{
Date date;
date.year = 2016;
date.month = 4;
date.day = 18;
int days = 10000;
date = whichDate(date,days);
printf("%4d-%02d-%02d",date.year,date.month,date.day);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 递归