书上的代码放在codeup里面超时了所以改进一下:
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101 20130105
样例输出
5
代码:
#include<stdio.h>
bool isleap(int year){
return ((year%400==0)||(year%4==0&&year%100!=0));
}
int month[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}};
int main(){
int time1,y1,m1,d1,y,d,m;
int time2,y2,m2,d2,res=0;
while(scanf("%d%d",&time1,&time2)!=EOF){
if(time1<time2){int temp;temp=time2;time2=time1;time1=temp;}
y1=time1/10000;m1=time1%10000/100;d1=time1%100;time1=0;
y2=time2/10000;m2=time2%10000/100;d2=time2%100;time2=0;
for(int i=1;i<m1;i++){
time1+=month[i][isleap(y1)];
}
for(int j=1;j<m2;j++){
time2+=month[j][isleap(y2)];
}
y=y1-y2;
d=d1-d2;time1++;
// printf("%d ",time1);printf("%d\n",time2);
res=time1-time2+d;
if(y>0){
for(int i=0;i<y;i++){
if(isleap(y2+i))res+=366;
else res+=365;
}
}
printf("%d\n",res);
}
return 0;
}