题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入
20130101
20130105
样例输出
5
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 int isLeap(int year){ 6 return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); 7 } 8 int month[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; 9 int main(){ 10 int t1,t2, yy1, mm1, dd1, yy2, mm2, dd2; 11 scanf("%d%d", &t1, &t2); 12 if(t1 > t2) 13 swap(t1, t2); 14 yy1 = t1 / 10000; 15 mm1 = (t1 % 10000) / 100; 16 dd1 = t1 % 100; 17 yy2 = t2 / 10000; 18 mm2 = (t2 % 10000) / 100; 19 dd2 = t2 % 100; 20 int gap = 1; 21 while(yy1 < yy2 || mm1 < mm2 || dd1 < dd2){ 22 dd1++; 23 gap++; 24 if(dd1 > month[isLeap(yy1)][mm1]){ 25 dd1 = 1; 26 mm1++; 27 } 28 if(mm1 > 12){ 29 yy1++; 30 mm1 = 1; 31 } 32 } 33 printf("%d ", gap); 34 cin >> t1; 35 return 0; 36 37 }
总结:
1、日期差值的思路:从小日期开始按天累加,直到小日期等于大日期。在累加的过程中需要做进制转换,年月日的进制中,日进到月会变化,所以将这部分存储为一个二维数组,分别记录平年与闰年的每月天数。
2、闰年:能被4整除且不能被100整除,或者能被400整除。