日期差值
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5
#include<stdio.h>
/*日期差值:
首先将所给日期分割成年、月、日的形式很好,定义一个day记录相隔的天数
对于非起始年与结束年的情况(中间年份),day+365或day+366
对于起始年份或结束年份有以下几种情况:
情况:1.同年同月同日
2.同年同月不同日
3.同年不同月
4.不同年
要注意time1>time2
注意:1.分割数字可以采用除法、求余
2.如何判断闰年:
普通年对4求余为0,对100求余不为0
世纪年对400为0
3.写完代码后,AC一直为50%
漏掉了一种情况,如果输入年份1>输入年份2呢?
经验:1.写完代码先测试给出用例
2.若一直找不出错误记得回顾一下题目
*/
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 isLeap(int year)
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else
return 0;
//return year%4==0&&year%100!=0||year%400==0;
}
int main()
{
int time1,time2;
while(scanf("%d%d",&time1,&time2)!=EOF)
{
if(time1>time2){ //若time1>time2
int temp=time1;
time1=time2;
time2=temp;
}
int y1,y2,m1,m2,d1,d2;//年、月、日
int day=0;//相隔天数
y1=time1/10000;
m1=time1%10000/100;
d1=time1%10000%100;
y2=time2/10000;
m2=time2%10000/100;
d2=time2%10000%100;
for(int i=y1; i<=y2; i++)
{
if(i==y1)//起始年
{
int flag=isLeap(y1);
if(y1==y2&&m1==m2&&d1==d2) //同年同月同日
day=1;
else if(y1==y2&&m1==m2) //同年同月
day+=d2-d1+1;
else if(y1==y2&&m1!=m2) //同年不同月
{
for(int j=m2; j>=m1; j--)
{
if(j==m2)
day+=d2;
else if(j==m1)
day+=month[j][flag]-d1+1;
else
day+=month[j][flag];
}
}
else //不同年
{
for(int j=m1; j<=12; j++) //对第一年处理
{
if(j==m1)
day+=month[j][flag]-d1+1;
else
day+=month[j][flag];
}
for(int j=m2; j>=1; j--) //对第二年处理
{
flag=isLeap(y2);
if(j==m2)
day+=d2;
else
day+=month[j][flag];
}
}
}
if(i!=y1&&i!=y2)//中间年份
{
int flag=isLeap(i);
if(flag)
day+=366;
else
day+=365;
}
}
printf("%d\n",day);
}
return 0;
}