《程序员的算法趣题》-(日)增井敏克 Python解题 -- (Q07)

《程序员的算法趣题》-(日)增井敏克 , 书中为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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值