有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入格式
输入包含多组测试数据。
每组数据占两行,分别表示两个日期,形式为 YYYYMMDD
。
输出格式
每组数据输出一行,即日期差值。
数据范围
年份范围 [1,9999],
保证输入日期合法。
测试数据的组数不超过 100。
输入样例:
20110412
20110422
输出样例:
11
题解:
我们可以分别计算从公元1年开始到这个日期的天数,然后再相减就行了。
这里难免少不了闰年的判断,代码如下:
if((year%4==0&&year%100!=0)||year%400==0)
首先我们要将给出的数提取出年月日分别是多少。那怎么从一个数里面取出自己想要的数,这个有规律,其实应该还是挺简单的吧,算是编程入门。
我们先定义一个数组储存每个月份的天数,然后再修改就好了,这里有一个技巧。
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
这样数组索引为1的位置就是1月份的天数了。
注意:题目要输入多组数据。所以
while(cin>>day1>>day2)
完整代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int day1,day2;
int get(int n)
{
int cnt=0;
int year=n/10000;
int month=n%10000/100;
int day=n%100;
if((year%4==0&&year%100!=0)||year%400==0) monthday[2]=29;
else monthday[2]=28;
cnt+=day;
while(month--) cnt+=monthday[month];
while (year--)
{
if ((year % 4 == 0&&year%100!=0) || (year % 400 == 0))
{
cnt += 366;//闰年一共有这么多天
}
else cnt += 365;//平年的天数
}
return cnt;
}
int main()
{
while(cin>>day1>>day2)
cout<<abs(get(day2)-get(day1))+1<<endl;//记得加上abs,以免减出负数来
//为什么要加上1,20110412,20110422这两个数相减我们很容易计算出来是10,但是要求输出11,所以要加1.
//因为题目说如果两个日期是连续的我们规定他们之间的天数为两天。
}