-
题目描述:
-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
-
输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
-
输出:
-
每组数据输出一行,即日期差值
-
样例输入:
-
20110412 20110422
-
样例输出:
-
11
-
#include<stdio.h> bool isLeapYear(int year) { if( (year%4==0 && year%100!=0) || year%400==0) return true; return false; } int abs(int n) { if(n<0) return -n; return n; } int dayOfmonth[13][2]={ {0,0}, //0月 为了使用哈希功能 {31,31}, //1月 {28,29}, //2月 {31,31}, //3月 {30,30}, //4月 {31,31}, //5月 {30,30}, //6月 {31,31}, //7月 {31,31}, //8月 {30,30}, //9月 {31,31}, //10月 {30,30}, //11月 {31,31}, //12月 }; int buffer[5001][13][32];//日期00000101至50001231距离原点日期的天数,哈希应用x,y,z分别代表年月日 struct Date { int year; int month; int day; void nextDay() { day++; if(day>dayOfmonth[month][isLeapYear(year)]) { day=1; month++; if(month>12) { month=1; year++; } } } }; int main() { int year,month,day,cnt; Date d; d.year=0; d.month=1; d.day=1; cnt=0; while(d.year<=5000) { buffer[d.year][d.month][d.day]=cnt; d.nextDay(); cnt++; } while(scanf("%4d%2d%2d",&year,&month,&day)!=EOF) { int dis1=buffer[year][month][day]; scanf("%4d%2d%2d",&year,&month,&day); int dis2=buffer[year][month][day]; printf("%d\n",abs(dis2-dis1)+1); } }