02 日期类问题

#include<stdio.h>
using namespace std;
#define ISYEAP(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][ISYEAP(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++;        //计数器累加,没经过一天计数器即+1,代表与原点日期的间隔又增加一天 
    }
    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)); //用预处理的数据计算两日期的差值,注意需对求绝对值。 
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值