有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入格式
输入包含多组测试数据。
每组数据占两行,分别表示两个日期,形式为YYYYMMDD
。
输出格式
每组数据输出一行,即日期差值。
数据范围
年份范围 [1,9999],
保证输入日期合法。
测试数据的组数不超过 100。
输入样例:
20110412
20110422
输出样例:
11
求日期间隔问题可以这样求:假如我们输入了两个日期
分别为y1年,m1月,d1日和y2年,m2月,d2日。
那么就可以求出来0年到y1-1年的总日期,然后求出第y1的第1月到m1-1月的所有日期加上,然后最终加上d1日。然后同理求出另一个日期的时间,最终两者一减,就是最终的间隔时间(天)。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
//一三五七八十腊 31天永不差
const int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool isRun(int year) { //求是不是闰年
return ((year % 4 == 0 && year % 100 != 0)||(year%400 == 0));
}
int main(){
int a,b;
while(cin >> a >> b){
int yearA = a /10000; //求出来年月日
int yearB = b /10000;
int monthA = a/100 % 100;
int monthB = b/100 % 100;
int dayA = a%100;
int dayB = b%100;
//求A的总日期
long long sumDayA = 0;
for(int i = 0;i <= yearA-1;i++){
if(isRun(i))sumDayA += 366;
else sumDayA += 365;
}
if(isRun(yearA)){
for(int i = 1;i <= monthA - 1;i++){
if(i == 2)sumDayA += month[i]+1;
else sumDayA += month[i];
}
}else{
for(int i = 1;i <= monthA - 1;i++){
sumDayA += month[i];
}
}
sumDayA += dayA;
//求B的总日期
long long sumDayB = 0;
for(int i = 0;i <= yearB - 1;i++){
if(isRun(i))sumDayB += 366;
else sumDayB += 365;
}
if(isRun(yearB)){
for(int i = 1;i <= monthB - 1;i++){
if(i == 2)sumDayB += month[i]+1;
else sumDayB += month[i];
}
}else{
for(int i = 1;i <= monthB - 1;i++){
sumDayB += month[i];
}
}
sumDayB += dayB;
//也可以不加绝对值而改为判断谁大谁小
cout << abs(sumDayB - sumDayA) + 1 << endl;
}
return 0;
}