昨天在微信里面看到一道题,赛题是华为【开发者英雄大会】寻找超级算法大师-DevCloud赛道出的,活动地址。
赛题为:
赛题蛮中规中矩的,涉及不到高深的算法,就是计算两日期之间的日期差距。看了网上的一些代码大多都是先计算当年的剩余日子+末尾年开始的日子+中间年份的日子。虽然好理解,但是写出来还是蛮复杂的,要注意闰年的情况。
这里给出一种新的思路:先分别计算两个日期距离公元元年之间的日子,然后将得到的两个日子相减就能得到两日期之间相差的天数了。而计算与公元元年之间的差距是很好计算的,只需要一个数学公式就可以了。我们就是2016-12-22为例子说明一下。首先计算2016年1月1日之前的天数,先假设每年只有365天,那么一共有(2016 - 1)* 365天。然后在计算2016年之前一共有多少个闰年,一共有
(2016 - 1)/ 4 - (2016 - 1) / 100 +(2016 - 1) / 400 个闰年。每个闰年比平年多一天,那么2016年之前一共有
(2016 - 1)* 365 + (2016 - 1)/ 4 - (2016 - 1) / 100 +(2016 - 1) / 400 天。然后在计算2016年过了多少天,这个就比较简单了,之间看代码就好了。<