【日期问题】九度OJ 1096:日期差值

一、题目内容

题目描述:

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

输入:

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

输出:

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

样例输入:

20110412
20110422

样例输出:

11

二、代码及注释

#include<stdio.h>
#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ?1:0
using namespace std;
/*
思想:设定一个源点时间(如0000年1月1日),计算将两个日期的日期距离源点日期的时间差,
存入数组中,接着计算差值即可(必要时加绝对值)
*/
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 Year;
    int Month;
    int Day;
    //天数增加动态函数
    void nextDay(){
        Day++;
        if(Day>dayofMonth[Month][ISYEAP(Year)]){
            Day=1;
            Month++;
            if(Month>12){
            Month=1;
            Year++;
            }
        }
    }
};
int Abs(int x){
    return x<0?-x:x;
}
int buf[5001][13][32];
int main(){
    Date tmp;
    int cnt=0;//统计该日期到0000年1月1日的天数
    tmp.Year=0;
    tmp.Month=1;
    tmp.Day=1;
    while(tmp.Year!=5001){
        buf[tmp.Year][tmp.Month][tmp.Day]=cnt;
        tmp.nextDay();
        cnt++;
    }
    int y1,m1,d1;
    int y2,m2,d2;
    while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF){
        scanf("%4d%2d%2d",&y2,&m2,&d2);
        printf("%d\n",Abs(buf[y1][m1][d1]-buf[y2][m2][d2])+1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mad Idea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值