描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入描述:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出描述:
每组数据输出一行,即日期差值
示例1
输入:
20110412 20110422
输出:
11
解题思路:
(1)需要判断是否是闰年,闰年2月为29,反之28;
(2)把该年之前的总天数和该年的总天数分开计算;
代码:
#include <complex>
#include <iostream>
using namespace std;
int monthday[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} //闰年
};
bool isyear(int n){ //判断是否是闰年
if(n%100!=0&&n%4==0||n%400==0){
return true; //闰年
}else {
return false;
}
}
int yearday(int n){ //计算当年的天数
int sum=0;
if(isyear(n)){ //闰年
sum+=366;
}else {
sum+=365;
}
return sum;
}
int monthsum(int n,int year,int day){ //计算该年的天数
int sum=0;
int row=isyear(year); //判断是否闰年
for(int i=0;i<n;i++){
sum+=monthday[row][i];
}
return sum+day;
}
int yearsum(int year){ //计算该年之前的总天数
int sum=0;
for(int i=1;i<year;i++){
sum+=yearday(i);
}
return sum;
}
int main() {
int a,b;
while (cin >> a >> b) { // 注意 while 处理多个 case
int year1,month1,day1;
int year2,month2,day2;
year1=a/10000,month1=(a/100)%100,day1=a%100;
year2=b/10000,month2=(b/100)%100,day2=b%100;
int sum1=yearsum(year1)+monthsum(month1, year1, day1);
int sum2=yearsum(year2)+monthsum(month2, year2, day2);
cout<<abs(sum1-sum2)+1<<endl;
}
}