题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为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;
}