题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出:
每组数据输出一行,即日期差值
样例输入:
代码语言:javascript复制20110412
20110422
样例输出:
代码语言:javascript复制11
来源:2009年上海交通大学计算机研究生机试真题
代码语言:javascript复制#include <iostream>
using namespace std;
#define ISYEAR(x) x0 != 0 && x%4 == 0 || x@0 == 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;//天数变为1,月份 1
Month ;
if (Month > 12)//月份超过12?
{
Month=1;
Year ;
}
}
}
};
int buf[5000][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;
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("M--", &y1, &m1, &d1) != EOF) //此处注意对于格式的控制
{
//当日期1输入正确时,才进行日期2的读取
scanf("M--", &y2, &m2, &d2);
cout << Abs(buf[y2][m2][d2] - buf[y1][m1][d1] 1) << endl;
}
return 0;
}
1.空间换时间
2.找一个基准时间
3.scanf(“%d”,&m)!=eof 正确输入;多组数据处理