ACM_python实现(统计数字问题)递归算法

ACM_python

#CSDN:Naturesicence
#Nick Name:Alics
#Version: 1.1
c = [0] * 10
#获取输入数字的位数
def weishu(i):
    return len(str(i))

#获取输入数字的最大位的值
def maxwei(i):
    m = i // 10**(weishu(i) - 1)
    return m

#获取余数
def yushu(i):
    ml = i % 10**(weishu(i) - 1)
    return ml

#获取零的个数
def getzero(m):
    if( m == 1):
        return 1
    return getzero(m - 1) + 10**(m - 1)

#主要的计算过程
def anwser(i):
    for count0 in range(10):
        c[count0] = c[count0] + (weishu(i) - 1) * maxwei(i) * 10**(weishu(i) - 2)
    for count1 in range(int(maxwei(i))):
        c[count1] = c[count1] + 10**(weishu(i) - 1)
    c[int(maxwei(i))] = c[int(maxwei(i))] + yushu(i) + 1
    t = int(yushu(i))
    if t == 0:
        c[0] += weishu(i) - 1
        return c
    lenc = len(str(t))
    if lenc != (weishu(i) - 1):
        c[0] += (weishu(i) - lenc - 1) * (t + 1)#输入i的中间含零的处理(列数*行数)
    return anwser(t)

#主函数
def main():
    i = eval(input())
    c = anwser(i)
    c[0] = c[0] - getzero(weishu(i))
    for count2 in range(10):
        print(int(c[count2]))

if "__main__":
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值