博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日期计算
阅读量:6092 次
发布时间:2019-06-20

本文共 1162 字,大约阅读时间需要 3 分钟。

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

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

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

【样例输入】2011041220110422

【样例输出】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
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); }

转载于:https://www.cnblogs.com/kingwolfofsky/archive/2012/01/30/2332478.html

你可能感兴趣的文章
C语言嵌入式系统编程修炼之(三)内存操作
查看>>
IE和Firefox的Javascript兼容性总结
查看>>
c++ _int64 转成string
查看>>
Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现
查看>>
linux后台运行程序
查看>>
ADO,OLEDB,ODBC,DAO,RDO的区别说明
查看>>
RabbitMQ消息队列(一): Detailed Introduction 详细介绍[转]
查看>>
FDATool使用
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
LDAPserver的安装
查看>>
Android 通过广播来异步更新UI
查看>>
IIS7如何显示详细错误信息
查看>>
ViewPager切换动画PageTransformer使用
查看>>
meterpreter
查看>>
coco2d-x 基于视口的地图设计
查看>>
C++文件读写详解(ofstream,ifstream,fstream)
查看>>
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
新手如何学习 jQuery?
查看>>
配置spring上下文
查看>>