# 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; }
新闻热点
疑难解答