计算日期差值

计算日期差值

题目:有两个日期,球两个日期之间的天数,如果两个日期连续,我们规定他们之间的天数为两天
输入样例:20180103
    20171223
样例输出:12
实现代码:
#include <iostream>
#include <stdio.h>
#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){
				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;
	while(tmp.Year!=5001){
		buf[tmp.Year][tmp.Month][tmp.Day]=cnt;
		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); 
	} 
	return 0;
}
测试输出:
20180101
20180103
3
20180103
20170101
368
20180103
20171223
12




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值