输入一个日期和一个整数n,输出从该日期起经过n天以后的日期
思路:函数调用,计算明天是哪一天,循环调用即可
函数1判断闰年
#include "head.h"
int isLeap(int year)
{
if (0 == year % 4 && year % 100 || 0 == year % 400)
{
return 1;
}
else
{
return 0;
}
}
函数2
#include "head.h"
int date_cacl(int year,int mon,int day,int n)
{
int a[13] = { 31,28,31,30,31,30,31,31,30,31,30,31,0 };//a[13]用于判断是否跨年
int i;
int tmp1 = 0, sum = 0, tmp2 = 0;//tmp1用于记录天数,tmp2用于记录年份
//step1:计算输入日期距离年初的天数
for ( i = 0; i < mon-1; i++)
{
tmp1 += a[i];
}
tmp1 += day;
if (mon>2&&isLeap(year))
{
tmp1 += 1;
}
tmp1 += n;//距离年初的总天数
//step2:判断是否需要往前算日期,如:2020-3-15 计算-125天为 2019-11-13
while (tmp1<0)
{
year = year - 1;
tmp1 += 365;
if (isLeap(tmp2))
{
tmp1 += 1;
}
}
//step3:向后减,每次减一个月的天数,增加一个月
for ( i = 1; tmp1>a[i] ;i++)
{
tmp1 -= a[i];
if (2==i&&isLeap(year))
{
tmp1 -= 1;
}
if (a[i]==0)//已经过了365天,年份+1,回到1月
{
i = 1;
year += 1;
}
}
printf("经过%d天后的日期是%d-%d-%d\n", n, year, i, tmp1);
return 0;
}
主函数
#include "head.h"
int main()
{
int year, mon, day;
int n;
printf("请输入一个日期和一个整数n:\n");
scanf("%d%d%d%d", &year, &mon, &day, &n);
date_cacl(year, mon, day, n);
system("pause");
return 0;
}
输出效果