题目
日期类的题目基本都要找一个起点,提前预处理
代码
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 }