
# include <stdio.h> #define ISYEAP(x) x%100!=0 && x%4 == 0 || x%400 == 0?1:0//定義宏判斷是否為閏年,方便計算每月天數int dayOfMonth[13][2] = { 0,0, 31,31, 28,29, 31,31, 30,30, 31,31, 30,30, 31,31, 31,31, 30,30, 31,31, 30,30, 31,31};//預存每月的天數,注意二月配合宏定義作特殊處理struct Date{//一個日期類 int Day; int Month; int Year; void nextDay(){//這個函數是計算下一天的日期 Day++; if(Day>dayOfMonth[Month][ISYEAP(Year)]){ //若自增的日數超過了當月的最大日數 Day = 1; Month++;//進入下一月 if(Month>12){//月數大于12 Month = 1; Year++;//進入下一年 } } } };int buf[3001][13][32];//創建一個三維數組int Abs(int x){//求絕對值的函數 return x<0?-x:x;} int main(){ Date tmp; int cnt=0;//計數器計算天數 tmp.Day=1; tmp.Month = 1; tmp.Year = 0;//初始化日期為0年1月1日 while(tmp.Year !=3001){//日期不超過5000年 buf[tmp.Year][tmp.Month][tmp.Day] = cnt; //將該日與0年1月1號天數差保存起來 tmp.nextDay(); //計算下一天日期 cnt++;//日期每向前走一個計數器自動+1 } int d1, m1, y1; while(scanf("%d%d%d", &y1, &m1, &d1)!=EOF){ PRintf("%d/n", Abs(buf[y1][m1][d1] -buf[y1][1][1]) + 1 ); //用預處理的數據計算兩日期的差值,注意需對其求絕對值 } return 0; }