思路:
本次以正常的日期计算,如相邻两个日期只差一天,若要按原题,可对该代码最后答案+1即可。
闰年的计算思路:
#include<iostream>
#include<algorithm>
using namespace std;
int month[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//初始化每个月份的天数
struct {
int year, month, day;
}d1,d2;
int main(){
int date1,date2; //存储输入的两个日期
cin >> date1 >> date2;
if(date1 > date2) swap(date1, date2);//令date1存储小的日期、date2存储大的日期
d1.year = date1/10000; d1.month = date1%10000/100; d1.day = date1%100;//截取对应部分的日期
d2.year = date2/10000; d2.month = date2%10000/100; d2.day = date2%100;
for(int i = 1; i < 13; ++i)
month[i] += month[i - 1]; // 令每个month[i]表示该月份之前的所有天数,如2月及其之前的所有天数
int ans = month[d2.month - 1] + d2.day - month[d1.month-1] - d1.day;//先计算日期2到年头的日期,减去,日期1到年头的日期。
if(d1.year % 4 == 0 && d1.year%100 || d1.year % 400 == 0) //如果日期1为闰年且月份大于2了,就是减少了1天
if(d1.month > 2) ans--;
if(d2.year % 4 == 0 && d2.year%100 || d2.year % 400 == 0)//如果日期2为闰年且月份大于2月了,就是加少了1天
if(d2.month > 2) ans++;
//算式 = 两个日期的年份差 + 日期2的闰年数量 - 日期1的闰年数量。
ans += month[12] * (d2.year- d1.year) + (d2.year/4 - d2.year/100 + d2.year/400) - (d1.year/4 - d1.year/100 + d1.year/400);
cout << ans;
return 0;
}