《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q07)
阿新 • • 發佈:2018-12-14
《程式設計師的演算法趣題》-(日)增井敏克 , 書中為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