首页 > 其他 > 详细

九度1096:日期差值

时间:2015-01-04 09:59:12      阅读:244      评论:0      收藏:0      [点我收藏+]

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:日期差值

原文:http://blog.csdn.net/lanjiangzhou/article/details/42386673

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!