算法趣题Q7:日期的二进制转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yk_0311/article/details/82227718
'''
把年月日表示为YYYYMMDD这样的8位整数,然后把这个整数转换成二进制数并且逆序排列,再把得到的二进制转换成十进制数,求与原日期一致的日期。
求得的日期要在上一次东京奥运会(1964年10月10日)到下一次东京奥运会(预定举办日期为2020年7月24日)之间。
例日期为1966年7月13日时:
1.YYYYMMDD格式-->19660713
2.转换成二进制-->1001010111111111110101001
3.逆序排序-->1001010111111111110101001
4.把逆序排列得到的二进制转换成十进制数-->19660713(回到最初的日期1966年7月13日)
'''
# 实质就是转换为二进制之后其中的二进制数就是一个回文
# 这里是关于日期,那么重点在于datetime这个模块的使用


import datetime


def ishuiwen(date):  # 输入一个date对象
    global ls
    n = date.strftime("%Y%m%d")  # 转换成为了字符串
    strs = str(bin(eval(n))[2:])  # 转换为二进制并且转换为字符串
    if strs == strs[::-1]:
        ls.append(n)


def judge(begin, end, delta):
    while begin < end:
        ishuiwen(begin)
        begin = begin + delta


begin = datetime.date(1966, 7, 13)  # 开始日期
end = datetime.date(2020, 7, 24)  # 结束日期
delta = datetime.timedelta(days=1)  # 时间差
ls = []
judge(begin, end, delta)
print(ls)

输出:

['19660713', '19660905', '19770217', '19950617', '20020505', '20130201']

实质就是转换为二进制之后其中的二进制数就是一个回文

这里是关于日期,那么重点在于datetime这个模块的使用

猜你喜欢

转载自blog.csdn.net/Yk_0311/article/details/82227718
Q7