日期计算

1096: 日期差值

【题目描述】有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

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

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

【样例输入】20110412 20110422

【样例输出】11

很简单的一道题目,思路很简单,计算两个日期分别到1年1月1日间隔的天数,然后相减加一即可。计算到00010101的间隔天数包含了如下日期计算常见的一些内容。


闰年判断 表达式

根据格里历:平年365日,闰年366日;但四年之闰余,仅23时15分4秒,闰一日,未免过多,超过之44分56秒,积至二十五闰,为17时58分24秒,约合一日之3/4,故每满百年废一闰,至第400年又不废。

判断闰年的表达式如下(C语言版)

!(y%400)||(!(y%4)&&y%100))
y%4?0:(y%100?1:(y%400?0:1))

计算距公元1年1月1日天数

首先使用数组索引前几个月天数,并加上当月天数,如果是月份大于3且闰年(注意判断顺序,利用||的短路)则加上1天,然后加上之前年份的总天数,这里利用表达式r+=--y*365+y/4-y/100+y/400; 来计算。

int R[]={0,31,59,90,120,151,181,212,243,273,304,334};
int calc(int y){
	int m=y%10000/100;
	int r=R[m-1]+y%100;
	y/=10000;
	r+=(m>2&&(!(y%400)||(!(y%4)&&y%100)))?1:0;
	r+=--y*365+y/4-y/100+y/400;
	return r;
}


原题程序代码如下:

#include<stdio.h>
int R[]={0,31,59,90,120,151,181,212,243,273,304,334};
int calc(int y){
	int m=y%10000/100;
	int r=R[m-1]+y%100;
	y/=10000;
	r+=(m>2&&(!(y%400)||(!(y%4)&&y%100)))?1:0;
	return r+--y*365+y/4-y/100+y/400;
}
int main(){
	int x,y;
	while(scanf("%d%d",&x,&y)!=EOF)printf("%d\n",calc(y)-calc(x)+1);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值