问题描述 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日,总共有多少天?

本文介绍了一个Python程序,通过日期组合来创建一个字典并计数,特别关注闰年的处理。程序计算了1900年至9999年间,闰年和非闰年对存储空间的需求差异。
###########一种用存储换空间的方法,填空题不建议这样写
from datetime import date,timedelta
from time import time
from copy import deepcopy
a = time()

#135781012 31 7个
dic = {}
for ii in [1,3,5,7,8,10,12]:
    for jj in range(1,32):
        tem = dig(ii) + dig(jj)
        if dic.get(tem):
            dic[tem] +=1
        else:
            dic[tem] = 1

#4,6,9,11 30 4个
for ii in [4,6,9,11]:
    for jj in range(1,31):
        tem = dig(ii) + dig(jj)
        if dic.get(tem):
            dic[tem] +=1
        else:
            dic[tem] = 1

#run
run = deepcopy(dic)
for ii in [2]:
    for jj in range(1,30):
        tem = dig(ii) + dig(jj)
        if run.get(tem):
            run[tem] +=1
        else:
            run[tem] = 1

#ping
ping = deepcopy(dic)
for ii in [2]:
    for jj in range(1,29):
        tem = dig(ii) + dig(jj)
        if ping.get(tem):
            ping[tem] +=1
        else:
            ping[tem] = 1

#2 闰年29 平年28 1个
def is_leap_year(year):
    """
    判断给定年份是否为闰年。

    参数:
        year (int): 待判断的年份。

    返回值:
        bool: 如果是闰年返回 True,否则返回 False。
    """
    if year % 4 != 0:
        return False  # 年份不能被 4 整除,直接判断为平年
    elif year % 100 == 0:
        if year % 400 == 0:
            return True  # 年份能被 100 整除但同时能被 400 整除,是闰年
        else:
            return False  # 年份能被 100 整除但不能被 400 整除,是平年
    else:
        return True  # 年份能被 4 整除但不能被 100 
count = 0 
for i in range(1900,9999):
    tem = dig(i)
    if tem <= 20:
        if is_leap_year(i):
            count += run.get(tem,0)    
        else:
            count += ping.get(tem,0)    
        

bb= time()-a
print(count,bb)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值