1. 程式人生 > >《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q07)

《程式設計師的演算法趣題》-(日)增井敏克 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