
# include <stdio.h> #define ISYEAP(x) x%100!=0 && x%4 == 0 || x%400 == 0?1:0//定義宏判斷是否為閏年,方便計算每月天數(shù)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};//預(yù)存每月的天數(shù),注意二月配合宏定義作特殊處理struct Date{//一個日期類 int Day; int Month; int Year; void nextDay(){//這個函數(shù)是計算下一天的日期 Day++; if(Day>dayOfMonth[Month][ISYEAP(Year)]){ //若自增的日數(shù)超過了當月的最大日數(shù) Day = 1; Month++;//進入下一月 if(Month>12){//月數(shù)大于12 Month = 1; Year++;//進入下一年 } } } };int buf[3001][13][32];//創(chuàng)建一個三維數(shù)組int Abs(int x){//求絕對值的函數(shù) return x<0?-x:x;} int main(){ Date tmp; int cnt=0;//計數(shù)器計算天數(shù) 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號天數(shù)差保存起來 tmp.nextDay(); //計算下一天日期 cnt++;//日期每向前走一個計數(shù)器自動+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 ); //用預(yù)處理的數(shù)據(jù)計算兩日期的差值,注意需對其求絕對值 } return 0; }