《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~
在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)
Q07 日期的二进制转换
把年月日表示为 YYYYMMDD 这样的 8 位整数,然后把这个整数转换成二进制数并且逆序排列,再把得到的二进制数转换成十进制数,求与原日期一致的日期。求得的日期要在上一次东京奥运会(1964 年 10 月 10 日)到下一次东京奥运会(预定举办日期为 2020 年 7 月 24 日)之间。
例) 日期为1966年7月13日时
① YYYYMMDD格式→ 19660713
② 转换成二进制数→ 1001010111111111110101001
③ 逆序排列→ 1001010111111111110101001
④ 把逆序排列得到的二进制数转换成十进制数→ 19660713
……回到1966年7月13日(最初的日期)
import datetime
start_date = datetime.date(1964, 10, 10)
end_date = datetime.date(2020, 7, 24)
print("与原日期一致的日期如下:")
calc_date = start_date
while calc_date != end_date:
int_date = int(calc_date.strftime("%Y%m%d"))
binary_date = "{0:b}".format(int_date)
reverse_date = binary_date[::-1]
if binary_date == reverse_date:
print(calc_date)
calc_date += datetime.timedelta(days=1)
运行结果:
与原日期一致的日期如下:
1966-07-13
1966-09-05
1977-02-17
1995-06-17
2002-05-05
2013-02-01