日期差值

题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入

有多组数据,每组数据有两行,分别表示两个日期,形式为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 }
View Code

总结:

1、日期差值的思路:从小日期开始按天累加,直到小日期等于大日期。在累加的过程中需要做进制转换,年月日的进制中,日进到月会变化,所以将这部分存储为一个二维数组,分别记录平年与闰年的每月天数。

2、闰年:能被4整除且不能被100整除,或者能被400整除。

 
原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/8435054.html