(原创)codeup 1928: 日期差值

最近在读《算法笔记》
其中有条题来自codeup,觉得挺有趣,想来练手。
没想到会想了很久,但我又不想用书本写好的现成代码,想看看自己能走多远。

题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5


#include 

typedef struct Date
{
   int str;
   int year;
   int month;
   int day;
}Date;

int isLeap(int year);
void AdjustStrToDate(Date *date);

int main()
{
    int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31},dayCount=1;
    Date dates[2],temp;
    while(scanf("%d%d",&dates[0].str,&dates[1].str)!=EOF)
    {
        if(dates[0].str>dates[1].str)
        {
            temp = dates[0];
            dates[0] = dates[1];
            dates[1] = temp;
        }
        AdjustStrToDate(&dates[0]);
        AdjustStrToDate(&dates[1]);

        //1.若是不同年或者不同月,先整理当月剩下的日子
        if(dates[0].year!=dates[1].year||dates[0].month!=dates[1].month)
        {
            dayCount+=days[dates[0].month]-dates[0].day;
            dates[0].day=1;
            dayCount++;//这里加1是因为它到了第二个月份的一号,那个一号属于算进去的一天
        
            //先处理两个特殊月份
            if(dates[0].month==2&&isLeap(dates[0].year))
            {
                //又是2月又是闰年
                dayCount++;
                dates[0].month++;
            }
            else if(dates[0].month==12)
            {
                dates[0].year++;
                dates[0].month=1;
            }
            else
                dates[0].month++;
        }
        
        //2.若是不同年 ,先搞到同年为止
        while(dates[0].year!=dates[1].year)
        {
            for(;dates[0].month<=12;dates[0].month++)
            {
                dayCount+=days[dates[0].month];
                if(dates[0].month==2&&isLeap(dates[0].year))
                    dayCount++;
            }
            dates[0].year++;
            dates[0].month=1;
        }
        
        //3.若是不同月 ,先搞到同月为止
        for(;dates[0].monthyear = date->str/10000;
    date->month = date->str%10000/100;
    date->day = date->str%100;
}

你可能感兴趣的:((原创)codeup 1928: 日期差值)