http://ac.jobdu.com/problem.php?pid=1096
很经典的计算任意两个日期之间的差值。
方法:利用预处理,以空间换时间的方法,计算任意日期与初始日期0年1月1日之间的差值。再讲两差值求差+1即可。本题关键在预处理部分
#include<stdio.h>#define
ISYEAR(x) x%100!=0&&x%4==0||x%400==0?1:0int
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][ISYEAR(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); }}原文:http://blog.csdn.net/lanjiangzhou/article/details/42386673