【九度】题目1096:日期差值

来源:互联网 发布:清华java培训 编辑:程序博客网 时间:2024/05/16 04:55

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:10974

解决:3670

题目描述:

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

输入:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出:

每组数据输出一行,即日期差值

样例输入:
2011041220110422
样例输出:
11
#include "stdafx.h"#define ISYEAR(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][ISYEAR(Year)]){Day=1;Month++;if(Month>12){Month=1;Year++;}}}};int buf[50001][13][32];int Abs(int x){return x<0?-x:x;}int _tmain(){Date tmp;int cnt=0;tmp.Day=1;tmp.Month=1;tmp.Year=0;   //初始化日期类对象为0年1月1日while (tmp.Year!=5001){buf[tmp.Year][tmp.Month][tmp.Day]=cnt; //将该日与0年1月1日的天数差保存起来。    tmp.nextDay();                                           //计算下一天日期    cnt++;                                                       //计数器累加,每经过一天计数器即+1,代表与原点日期的间隔又增加一天}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;}


1、保存每个日期与原点日期的天数差时,使用三维数组,用年月日来表示数组下标,不必寻找其存储地址,是HASH的基本思想。
2、%2d形式,读取两位。读取特定位数的技巧。
3、将buf[5001][13][32]这个比较费内存的数组定义为全局变量,如若不然,函数栈空间不足以提供如此大的内存,出现栈溢出。涉及此类需要开辟大空间的情况,需要在函数体外定义。
0 0
原创粉丝点击