题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入描述:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出描述:
每组数据输出一行,即日期差值
示例1
输入
复制
20110412
20110422
输出
复制
11
评论:简单题,考察判断闰年方法及数据处理
unsigned int 0~4294967295
int 2147483648~2147483647
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
code:
#include <iostream>
using namespace std;
/*
注意:闰年的计算方法,1、能被4整除而不能被100整除 2、能被400整除
long 类型:-2147483648~2147483648
*/
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
long sum(long y,long m,long d) //统计到年初的时间
{
long result = 0;
for(int i=1;i<m;i++)
{
if(i==2)
{
if((y/4*4==y&&y/100*100!=y)||(y/400*400==y))
result += 29;
else
result += 28;
}
else
{
result += month[i-1];
}
}
return result + d;
}
long Betweendays(long a,long b)
{
long y1,y2,m1,m2,d1,d2;
long Count=1;
y1=a/10000;y2=b/10000;
m1=(a%10000)/100;m2=(b%10000)/100;
d1=(a%10000)%100;d2=(b%10000)%100;
// cout << y1 << m1 << d1 << " " << y2 << m2 << d2 <<endl;
for(int i=y1;i<y2;i++)
{
if((i/4*4==i&&i/100*100!=i)||(i/400*400==i))
Count += 366;
else
Count += 365;
}
return Count + sum(y2,m2,d2) - sum(y1,m1,d1);
}
int main()
{
long a,b;
cin >> a >> b;
if(a<b)
cout << Betweendays(a,b) <<endl;
else
cout << Betweendays(b,a) <<endl;
return 0;
}