日期差值

题目

日期类的题目基本都要找一个起点,提前预处理

代码

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 //判断是否是闰年或平年
 5 int ISYEAP(int x){
 6     if((x %100 != 0 && x%4 == 0) || x % 400 == 0) return 1;
 7     else return 0;
 8 }
 9 //记录每个月的天数,从0,0开始,平年闰年
10 int dayOfMonth[13][2] = {
11     0,0,
12     31,31,
13     28,29,
14     31,31,
15     30,30,
16     31,31,
17     30,30,
18     31,31,
19     31,31,
20     30,30,
21     31,31,
22     30,30,
23     31,31
24 };
25 //日期类,方便时间的推移
26 typedef struct Date{
27     int Day;
28     int Month;
29     int Year;
30     //计算下一天的日期
31     void nextDay(){
32         Day++;
33         if(Day > dayOfMonth[Month][ISYEAP(Year)]){
34             //进入下一个月
35             Day = 1;
36             Month++;
37             //进入下一年
38             if(Month > 12){
39                 Month = 1;
40                 Year++;
41             }
42         }
43     }
44 }Date;
45 int buf[5001][13][32]; //保留预处理的天数,存XX年XX月XX日距离起点(0年1月1日)的天数
46 int main(){
47     //初始化日期类0年1月1日——起点
48     Date tmp;tmp.Year = 0,tmp.Month = 1,tmp.Day = 1;
49     int cnt = 0;
50     while(tmp.Year!=5001){
51         buf[tmp.Year][tmp.Month][tmp.Day] = cnt;
52         tmp.nextDay();
53         cnt++;
54     }
55     //以上为预处理,统计5000年的每一天距离起点有多少天
56     int d1,m1,y1;
57     int d2,m2,y2;
58     while(scanf("%4d%2d%2d",&y1,&m1,&d1) != EOF){
59         scanf("%4d%2d%2d",&y2,&m2,&d2);
60         printf("%d
",abs(buf[y1][m1][d1] - buf[y2][m2][d2])+1);
61     }
62     return 0;
63 }
原文地址:https://www.cnblogs.com/fresh-coder/p/14466110.html