首页 > 代码库 > 九度1096:日期差值
九度1096:日期差值
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: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){
//月份超过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);
}
}
九度1096:日期差值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。