王道机考系列——日期类问题

王道机考系列——日期类问题

王道机考系列——日期类问题

日期差值

有两个日期,计算两个日期之间的天数,如果两个日期是连续的,我们规定他们之间的天数为两天。
输入:
    有多组输入,每组数据有两行,分别表示两个日期,形式为YYYYMMDD;
输出:
    每组数据输出一行,即日期差值。
样例输入:
    20110412
    20110422
样例输出:
    11

解析:将原问题统一到一个确定的起点区间上去,比如0年1月1日,当我们输入日期的时候计算出日期与起点区间的差,当我们计算两个日期的差时只需要将它们与起点区间的差相减就OK了,这个做法可以先计算出每个日期与起点日期之间的差,当我们输入日期的时候在O(1)的时间内可以查出当前日期与起点日期的差,相当于是用空间换取时间的做法。

注意:
闰年的判断条件是:当年数如果不能被100整除但是能被4整除时为闰年或者当年数能被40整除时为闰年

实现的C++程序

#include <stdio.h>
#include <iostream>

#define ISLEAPYEAR(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 year;
    int month;
    int day;

    void NextDay() {
   
        //  计算下一天的日期
        day++;
        if (day > DayofMonth[month][ISLEAPYEAR(year)]) {
   
            day = 1;
            month++;
            if (month > 12) {
   
                month = 1;
                year++;
            }
        }
    }

};

int buf[5001][13][32];  //保存预处理的天数
int abs(int x) {
   
    return x < 0 ? -x : x;
}

int main() {
   
    Date tmp;
    tmp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值