Q:给出两个日期,计算出两个日期相隔多少天。
- 按闭区间来算,即,输出值大于等于2。
- 难点主要在处理闰年,因为闰年关系到2月份究竟有几天。
// C++11代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 110;
int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 闰年需要改2月天数
void SetLeapYear(int year)
{
if (year%100==0 && year%400==0) month[2] = 29;
if (year%100==0 && year%400!=0) month[2] = 28;
if (year%100!=0 && year%4==0) month[2] = 29;
if (year%100!=0 && year%4!=0) month[2] = 28;
}
int main()
{
freopen("input.txt", "r", stdin);
string date1, date2;
while(cin>>date1>>date2)
{
int year1 = stoi(date1.substr(0, 4));
int month1 = stoi(date1.substr(4, 2));
int day1 = stoi(date1.substr(6, 2));
int year2 = stoi(date2.substr(0, 4));
int month2 = stoi(date2.substr(4, 2));
int day2 = stoi(date2.substr(6, 2));
// 相隔的年份[year1, year2) 左开右闭。这样就算多了year1中的部分月,算少了year2中的部分月
int days = 0;
for (int i=year1; i<year2; i++)
{
SetLeapYear(i);
for (int j=1; j<13; j++)
days += month[j];
}
// 补上year2算少的部分
SetLeapYear(year2);
for (int j=1; j<month2; j++)
days += month[j];
days += day2;
// 扣去year1多算的部分
SetLeapYear(year1);
for (int j=1; j<month1; j++)
days -= month[j];
days -= day1 - 1;
printf("%d
", days);
}
return 0;
}