码迷,mamicode.com
首页 > 其他好文 > 详细

九度1096:日期差值

时间:2015-01-04 10:00:12      阅读:157      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!