题目
我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。
输入:
年 月 日
N
输出:
(年月日+N天后的)年.月.日
算法
这是这个解法中最有趣的部分。先将N加到输入的“日”上,然后判断“日”的值是否超过了当月最大的天数,若为真则月+1;判断“月”是否超过了12,若为真则年+1,月=1。循环往复,知道“日”小于等于当月的最大天数。
代码
#include <stdio.h>
/*自定义数组赋值函数*/
void equal(int ed[12], int ing[12])
{
int i;
for (i = 0; i <= 11; i++)
{
ed[i] = ing[i];
}
}
int main(void)
{
int year, month, day, period,everym[12];
int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int nor[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
scanf("%d %d %d %d", &year, &month, &day, &period);
day = day + period;
do
{
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) equal(everym, run);
else equal(everym, nor);
if (day > everym[month - 1])
{
day = day - everym[month - 1];
month = month + 1;
if (month > 12)
{
year = year + 1;
month = 1;
}
}
}while (day > everym[month - 1]);
printf("%d.%d.%d\n", year, month, day);
return 0;
}
附
后来听搞竞赛的同学说这个算法是有名字的,好像是叫进位法。