#include <iostream>
using namespace std;
//定义日期结构体,用于存放年、月、日这三个日期相关的信息
struct Date
{
int year;
int month;
int day;
};
int main()
{
Date d1, d2;
//从标准输入(控制台)读取第一个日期的年、月、日信息
cin >> d1.year >> d1.month >> d1.day;
//从标准输入(控制台)读取第二个日期的年、月、日信息
cin >> d2.year >> d2.month >> d2.day;
int days = 0; //用于记录两个日期之间相差的天数,初始化为0
//判断第一个日期的年份是否小于第二个日期的年份,如果小于,则先按年逐步推进第一个日期到下一年
if (d1.year < d2.year)
{
//当月份还没到12月时(即当前年还没结束),进行以下循环操作
while (d1.month < 12)
{
d1.day++; //日期天数加1,表示日子往后推一天
days++; //相差天数也加1,因为每过一天,两个日期之间的天数差就多一天
//根据当前月份进行不同的日期边界判断和日期、月份的更新操作
switch (d1.month)
{
// 处理大月(31天的月份)的情况
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12:
//如果当前日期的天数超过了31天,说明进入下一个月了
if (d1.day > 31)
{
d1.month++; // 月份加1,进入下一个月
d1.day = 1; // 日期重置为1号
}
break;
//处理2月的情况,要考虑闰年和平年不同的天数情况
case 2:
//判断是否为闰年(能被4整除但不能被100整除,或者能被400整除就是闰年)
if (d1.year / 4 == 0 && d1.year % 100!= 0
|| d1.year % 400 == 0)
{
//如果是闰年且当前日期天数超过29天,进入下一个月
if (d1.day > 29)
{
d1.month++;
d1.day = 1;
}
}
else
{
//如果是平年且当前日期天数超过28天,进入下一个月
if (d1.day > 28)
{
d1.month++;
d1.day = 1;
}
}
break;
//处理小月(30天的月份)的情况
default:
if (d1.day > 30)
{
d1.month++;
d1.day = 1;
}
break;
}
}
//当前年结束后,年份加1,进入下一年,月份重置为1月
d1.year++;
d1.month = 1;
//加上一整年
//(按平年365天算,这里先简单加31天表示过渡到下一年年初,后续月份推进还会继续准确计算天数)
days += 31;
}
//当第一个日期的月份小于第二个日期的月份时,进行以下循环操作,按月份逐步推进第一个日期
while (d1.month < d2.month)
{
d1.day++; //日期天数加1,表示日子往后推一天
days++; //相差天数也加1,因为每过一天,两个日期之间的天数差就多一天
//根据当前月份进行不同的日期边界判断和日期、月份的更新操作,和前面判断年份时的逻辑类似
switch (d1.month)
{
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12:
if (d1.day > 31)
{
d1.month++;
d1.day = 1;
}
break;
case 2:
if (d1.year / 4 == 0 && d1.year % 100!= 0
|| d1.year % 400 == 0)
{
if (d1.day > 29)
{
d1.month++;
d1.day = 1;
}
}
else
{
if (d1.day > 28)
{
d1.month++;
d1.day = 1;
}
}
break;
default:
if (d1.day > 30)
{
d1.month++;
d1.day = 1;
}
break;
}
}
//当第一个日期的天数小于第二个日期的天数时,进行以下循环操作
//按天逐步推进第一个日期,直到天数相等
while (d1.day < d2.day)
{
d1.day++; //日期天数加1,表示日子往后推一天
days++; //相差天数也加1,因为每过一天,两个日期之间的天数差就多一天
}
//将计算得到的两个日期之间相差的天数输出到控制台
cout << days;
return 0;
}