计算某个日期起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 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#中的尾递归与Continuation详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结