题目

  1. 编写程序,输入一个日期和一个整数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;
}

执行结果
图片说明
图片说明