日期差值

题目描述

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

输入描述:

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

输出描述:

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

解答:

所有与日期有关的题目,都可以套用这个代码进行改变。

一个宏定义巧妙的控制闰年平年

一个日期结构体保存三个int值

用buf三维数组保存三个坐标组成的日期距离0年1月1日的天数,存为全局变量,而不是放在main函数里,

是为了预处理用空间换时间,在main函数里时可以直接查找对应的天数即可

nextDay函数不能直接传变量,应该用指针传值,因为形参不能给实参传值。

%4d可以一次性输入4位整数。


代码如下:

#include<stdio.h>
#define ISLEAP(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 (struct date * d){
	d->day++;
	if (d->day > dayOfMonth[d->month][ISLEAP(d->year)]){
		d->day = 1;
		d->month ++;
		if ( d->month > 12 ){
			d->month = 1;
			d->year++;
		}
	} 
}

int buf[5001][13][32];
int abs(int x){
	return x > 0 ? x : -x;
}

int main(){
	struct date *d = NULL;
	struct date temp;
	int cnt=1;
	int d1,m1,y1;
	int d2,m2,y2;
	d = &temp;
	d->day = 1;
	d->month = 1;
	d->year = 0;
	while ( d->year != 5001 ){
		buf[d->year][d->month][d->day] = cnt;
		cnt++;
		nextDay(d);
	}
	while ( scanf ("%4d%2d%2d",&d1,&m1,&y1) != EOF ){
		scanf ("%4d%2d%2d",&d2,&m2,&y2);
		printf("%d",abs(buf[d1][m1][y1] - buf[d2][m2][y2])+1);
	}


}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值