题目描述
有两个日期,求两个日期之间的天数。若两个日期是连续的,则规定他们之间的天数是两天
输入格式
有多组数据,每组数据有两行,分别表示两个日期,格式为YYYYMMDD
输出格式
每组数据输出一行,即日期差值
解决方案
基本思路:将较小的日期按天数逐渐累加到较大的日期,过程中记录累加次数,最终得出之间天数
#include<cstdio>
//定义month数组存储平年闰年的每个月份天数方便直接读取
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}
};
bool isLeap(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)//保证time1为较小日期
{
int temp = time1;
time1 = time2;
time2 = temp;
}
//获得两个日期中的年月日信息
y1 = time1/10000, m1 = time1%10000/100, d1 = time1%100;
y2 = time2/10000, m2 = time2%10000/100, d2 = time2%100;
int ans = 1;//记录结果(相差的天数)
while ( y1 < y2 || m1 < m2 || d1 < d2)
{
d1++;
if (d1 == month[m1][isLeap(y1)] + 1)//d超出当月天数
{
m1++;
d1 = 1;
}
if (m1 == 13)
{
y1++;
m1 = 1;
}
ans++;//每次循环增加累计次数
}
printf("%d\n",ans);
}
return 0;
}