-
题目描述:
-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
-
输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
-
输出:
-
每组数据输出一行,即日期差值
-
样例输入:
-
20110412 20110422
-
样例输出:
-
11
#include <stdio.h>
#include<stdlib.h>
判断是否为闰年,不能被100整除但能被4整除,或者能被400整除的是闰年
#define ISR(x) ((x%100!=0) && (x%4==0)) || (x%400==0) ? 1 : 0
using namespace std;
//保存不同月份的天数,由于2月有两种可能所以使用二维数组
int monthDays[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 };
int days[5001][13][32];
int count = 0;
int main()
{
//先计算出所有的日期距离原点日期的天数
for(int i=0;i<5000;i++) {
for(int j=1;j<13;j++) {
for(int k=1;k<=monthDays[j][ISR(i)];k++) {
days[i][j][k] = count++;
}
}
}
int y1,m1,d1;
int y2,m2,d2;
//利用scanf()可以指定截取连续输入的位数
while(scanf("%4d%2d%2d", &y1,&m1,&d1) != EOF) {
scanf("%4d%2d%2d", &y2,&m2,&d2);
//在stdlib.h 头文件中
int c = abs( days[y1][m1][d1] - days[y2][m2][d2]);
printf("%d\n", c+1); //题目要求相邻两天的差为2,所以+1
}
return 0;
}
用先计算所有日期与原点日期相隔天数 的方式日期类的题目的法宝