【輸出】每組資料輸出一行,即日期差值
【範例輸入】2011041220110422
【範例輸出】11
很簡單的一道題目,思路很簡單,計算兩個日期分別到1年1月1日間隔的天數,然後相減加一即可。計算到00010101的間隔天數包含了如下日期計算常見的一些內容。
閏年判斷 運算式
根據格里曆:平年365日,閏年366日;但四年之閏餘,僅23時15分4秒,閏一日,未免過多,超過之44分56秒,積至二十五閏,為17時58分24秒,約合一日之3/4,故每滿百年廢一閏,至第400年又不廢。
判斷閏年的運算式如下(C語言版)
代碼如下 |
複製代碼 |
!(y%400)||(!(y%4)&&y%100)) 或 y%4?0:(y%100?1:(y%400?0:1)) |
計算距公元1年1月1日天數
首先使用數組索引前幾個月天數,並加上當月天數,如果是月份大於3且閏年(注意判斷順序,利用||的短路)則加上1天,然後加上之前年份的總天數,這裡利用運算式r+=--y*365+y/4-y/100+y/400; 來計算。
代碼如下 |
複製代碼 |
int R[]={0,31,59,90,120,151,181,212,243,273,304,334}; int calc(int y){ int m=y%10000/100; int r=R[m-1]+y%100; y/=10000; r+=(m>2&&(!(y%400)||(!(y%4)&&y%100)))?1:0; r+=--y*365+y/4-y/100+y/400; return r; } |
原題程式碼如下:
代碼如下 |
複製代碼 |
#include<stdio.h> int R[]={0,31,59,90,120,151,181,212,243,273,304,334}; int calc(int y){ int m=y%10000/100; int r=R[m-1]+y%100; y/=10000; r+=(m>2&&(!(y%400)||(!(y%4)&&y%100)))?1:0; return r+--y*365+y/4-y/100+y/400; } int main(){ int x,y; while(scanf("%d%d",&x,&y)!=EOF)printf("%dn",calc(y)-calc(x)+1); } |