-
题目描述:
-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
-
输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
-
输出:
-
每组数据输出一行,即日期差值
-
样例输入:
-
20110412 20110422
-
样例输出:
-
11
1 #include<stdio.h> 2 #define ISYEAP(x) (x%100!=0 && x%4==0 || x%400==0)? 1 : 0 3 int dayofmonth[13][2]={ 4 0,0, 5 31,31, 6 28,29, 7 31,31, 8 30,30, 9 31,31, 10 30,30, 11 31,31, 12 31,31, 13 30,30, 14 31,31, 15 30,30, 16 31,31 17 }; 18 struct Date{ 19 int day; 20 int month; 21 int year; 22 void nextday() 23 { 24 day++; 25 if(day>dayofmonth[month][ISYEAP(year)]){ 26 day = 1; 27 month++; 28 if(month>12) 29 { 30 year++; 31 month=1; 32 } 33 } 34 } 35 }; 36 int buf[5001][13][32]; 37 int Abs(int x) 38 { 39 return x<0?-x:x; 40 } 41 int main() 42 { 43 Date tmp; 44 int cnt=0; 45 tmp.day = 1; 46 tmp.month = 1; 47 tmp.year = 0; 48 while(tmp.year != 5001) 49 { 50 buf[tmp.year ][tmp.month ][tmp.day ]=cnt; 51 tmp.nextday (); 52 cnt++; 53 } 54 int d1,m1,y1; 55 int d2,m2,y2; 56 while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF){ 57 scanf("%4d%2d%2d",&y2,&m2,&d2); 58 printf("%d\n",Abs(buf[y2][m2][d2]-buf[y1][m1][d1]+1)); 59 } 60 return 0; 61 }
PS:如果问题需要输出某个特定日期,是那年的第几天,则只需要将该日期与原点日期的天数减去那年元旦与原点日期天数。