Codeup-日期差值

题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出

每组数据输出一行,即日期差值

样例输入

20130101
20130105

样例输出

5

刚开始做这一题,最后大致代码与算法笔记上一致,但是程序运行一直显示超时,后来更改了若干出便提交成功,但是仍一直没有找到导致超时的点(尴尬。。。)

下面是这个问题的具体思路:

首先对于求解日期问题,输入两个整数,然后利用取余的方法,分离出年,月,日,两个日期默认第一个要比第二个日期小,所以在最开始做一个比较,将time1中存放较小的数字,然后就将day1++,判断day1有没有超过当月的最大日期,也就是恒等于最大天数+1,如果变成这样,则将day1=1,month1++;然后再判断month1是否等于13,成立的话,year1++,month1=1;然后再将总天数n++,这里n是从1开始的(题目要求),不断循环,具体代码如下:

#include <cstdio>
int a[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
bool isleayear(int year)
{
    return (year%4==0&&year%100!=0)||(year%400==0);
}

int main()
{
    int time1,y1,m1,d1;
    int time2,y2,m2,d2;
    while(scanf("%d%d",&time1,&time2)!=EOF)
    {
        if(time1>time2)
        {
            int temp=time1;
            time1=time2;
            time2=temp;
        }
        int n=1;
        d1=time1%100;m1=time1/100%100;y1=time1/10000;
        d2=time2%100;m2=time2/100%100;y2=time2/10000;
        while(d1<d2||m1<m2||y1<y2)
        {
            d1++;
            if(d1==a[m1][isleayear(y1)]+1)
            {
                d1=1;
                m1++;
            }
            if(m1==13)
            {
                m1=1;
                y1++;
            }
            n++;
        }
        printf("%d\n",n);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Zizizi9898/article/details/88753271