本题将日期差值分为三段计算
第一段是小年度过的时间
第二段是大年度过的时间
最后一段是,包括小年在内的,小年到大年之前的各年时间之和
3段-1段+2段+1即可
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
static const int month[2][13] =
{
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
static const int year[2] = {365, 366};
int main()
{
int isRun = 0;
int Y1, M1, D1, Y2, M2, D2;
while (scanf("%4d%2d%2d", &Y1, &M1, &D1) != EOF)
{
scanf("%4d%2d%2d", &Y2, &M2, &D2);
int PastDays1 = 0, PastDays2 = 0, YearGapDays = 0;
//此处需要求出各日期,在本年内过了多久
//以及相差的年份中过了多久
if ((!Y1 % 4 && Y1 % 100) || !Y1 % 400)
isRun = 1;
else
isRun = 0;
for (int i = 0; i < M1; i++)
PastDays1 += month[isRun][i];
PastDays1 += D1;
//以上求出了第一个日期在本年内过了多久
if ((!Y2 % 4 && Y2 % 100) || !Y2 % 400)
isRun = 1;
else
isRun = 0;
for (int i = 0; i < M2; i++)
PastDays2 += month[isRun][i];
PastDays2 += D2;
//此处求出了第二个日期在本年内过了多久
for (int i = min(Y1, Y2); i < max(Y1, Y2); i++)
{
if ((!i % 4 && i % 100) || !i % 400)
isRun = 1;
else
isRun = 0;
YearGapDays += year[isRun];
} //此处求出了算上最小年在内,年之间差了多久
if (Y1 > Y2)
cout << YearGapDays + PastDays1 - PastDays2 + 1;
else
cout << YearGapDays + PastDays2 - PastDays1 + 1;
//此处给出结果,需要区分哪个是大年
//需要减去小年度过的天数
//并加上大年度过的天数
}
return 0;
}