一、题意
二、解答过程
#include <iostream> #define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0//判断是否是闰年,闰年结果为1,不是闰年结果是0 int dayOfMonth[13][2]={//预存每月的天数,二月是特殊的 0,0,//0月... 31,31, 28,29,//2月 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[5001][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!=5001)//日期不超过5000年 { buf[tmp.Year][tmp.Month][tmp.Day]=cnt;//将该日与0年1月1日的天数差保存起来 tmp.nextDay();//计算下一天的日期 cnt++;//每经过一天,计数器累加 } int d1,m1,y1; int d2,m2,y2; while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF) { scanf("%4d%2d%2d",&y2,&m2,&d2);//读入要计算的两个日期 printf("%d\n",Abs(buf[y2][m2][d2]-buf[y1][m1][d1])+1);//用预处理的数据计算日期差 } return 0; }
2][m2][d2]-buf[y1][m1][d1])+1);//用预处理的数据计算日期差 } return 0; }