题目
- 编写程序,输入一个日期和一个整数n,输出从该日期起经过n天后的日期。
思路
首先计算输入日期距离年初的天数,然后加上距离多少的天数n,得到距离年初的总天数。这个数有可能大于365,但是没关系,每次减一个月的天数,不断的减,每减一次,就对月份加一。
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int isleap(int year);
int main()
{
int year,month,day,data,sum=0,days;
int n;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
printf("请输入日期:");
scanf("%d %d %d",&year,&month,&day);
printf("请输入经过的天数:");
scanf("%d",&n);
data=isleap(year);
//先计算出输入日期距离年初的天数,存入sum
for(i=1;i<month;i++)
{
sum+=a[i];
}
sum+=day;
if(data && month>2)
{
sum++;
}
days=sum+n;
while(days<0)//如果出现负值时,先以年为单位往前推
{
year=year-1;
days=days+365;
if(isleap(year))
{
days++;
}
}
for(i=1;days>a[i];)//不断对days做减法,直到days小于某个月的天数
{
days=days-a[i];
if(2==i && isleap(year))
{
days--;
}
i++;
if(13==i)//说明天数大于365天,此时已经减了12个月,所以年份加1,月份回到一月
{
i=1;
year++;
}
}
printf("经过%d天后,日期是:%d-%d-%d\n",n,year,i,days);
system("pause");
}
int isleap(int year)
{
if(0==year%4 && 0!=year%100 || 0==year%400)
return 1;
else
return 0;
}
执行结果

京公网安备 11010502036488号