问题 A: 日期差值
时间限制: 1 Sec 内存限制: 32 MB
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5
//整体思路:令日期不断加1,直到第一个日期等于第二个日期为止,累加器的值就是答案
#include<cstdio>
int month[13][2] = {//用两列来存储,平年和闰年,让索引与月相对应
{0,0},
{31,31},
{28,29},
{31,31},
{30,30},
{31,31},
{30,30},
{31,31},
{31,31},
{30,30},
{31,31},
{30,30},
{31,31}
};
bool isLeap(int year) {//判断是否为闰年
return (year%4==0 && year%100!=0)||(year%400==0);
}
int main() {
int time1,y1,m1,d1;
int time2,y2,m2,d2;
while(scanf("%d%d",&time1,&time2)!=EOF) {
if(time1 > time2) {
int temp =time1;
time1 = time2;
time2 = temp;
}
y1 = time1 / 10000, m1 = time1%10000 /100,d1 = time1 % 100;
y2 = time2 / 10000, m2 = time2%10000 /100,d2 = time2 % 100;
int ans = 1;
while(y1<y2||m1<m2||d1<d2) {
d1++;
if(d1 == month[m1][isLeap(y1)] + 1) {//当日期满m1月当用的天数,再次加1,让月增1,日期从,1 号开始
m1++;
d1=1;
}
if(m1 == 13) {//当月超过12就让y1年增1,月从1月开始
y1++;
m1=1;
}
ans++;
}
printf("%d\n",ans);
}
return 0;
}