题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入格式
输入包含多组测试数据。
每组数据占两行,分别表示两个日期,形式为 YYYYMMDD
。
输出格式
每组数据输出一行,即日期差值。
数据范围
年份范围 [1,9999],
保证输入日期合法。
测试数据的组数不超过 100。
输入样例:
20110412
20110422
输出样例:
11
解题思路:
输入两个日期,将两个日期全部转换为天,对于闰年且和二月再进行特判。
最后结果是两日期差值绝对值+1
由于是 多组测试数据知道具体组数输入的时候需要while(~scanf());
参考代码:
cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int days[]{
0,31,28,31,30,31,30,31,31,30,31,30,31
};
int leap(int y)
{
if(y%400==0 || y%4==0 && y % 100) return 1;
return 0;
}
int get_month(int y,int m)
{
if(m==2) return 28+leap(y);
return days[m];
}
int get_data(int year,int month,int day)
{
int data = 0;
for(int i=1;i<year;i++) data += 365 + leap(i);
for(int i=1;i<month;i++) data += get_month(year,i);
return data += day;
}
int main()
{
int y1,m1,d1,y2,m2,d2;
while(~scanf("%04d%02d%02d\n%04d%02d%02d",&y1,&m1,&d1,&y2,&m2,&d2))
{
cout<<abs(get_data(y1,m1,d1) - get_data(y2,m2,d2)) + 1<<endl;
}
return 0;
}