PAT A组 1049 Counting Ones python AC

找规律,分支原地起爆,还真肝出来了~~

n = int(input())
num = 0
num += str(n)[:-1].count('1')
if n >= 1000000000:
    if n >= 2000000000:
        num += 1000000000
    else:
        num += n % 1000000000
    num += 900000000 * (n // 1000000000)
    n %= 100000000
if n >= 100000000:
    if n >= 200000000:
        num += 100000000
    else:
        num += n % 100000000
    num += 80000000 * (n // 100000000)
    n %= 100000000
if n >= 10000000:
    if n >= 20000000:
        num += 10000000
    else:
        num += n % 10000000
    num += 7000000 * (n // 10000000)
    n %= 10000000
if n >= 1000000:
    if n >= 2000000:
        num += 1000000
    else:
        num += n % 1000000
    num += 600000 * (n // 1000000)
    n %= 1000000
if n >= 100000:
    if n >= 200000:
        num += 100000
    else:
        num += n % 100000
    num += 50000 * (n // 100000)
    n %= 100000
if n >= 10000:
    if n >= 20000:
        num += 10000
    else:
        num += n % 10000
    num += 4000 * (n // 10000)
    n %= 10000
if n >= 1000:
    if n >= 2000:
        num += 1000
    else:
        num += n % 1000
    num += 300 * (n // 1000)
    n %= 1000
if n >= 100:
    if n >= 200:
        num += 100
    else:
        num += n % 100
    num += 20 * (n // 100)
    n %= 100
if n >= 10:
    if n >= 20:
        num += 10
    else:
        num += n % 10
    num += 1 * (n // 10)
    n %= 10
if n >= 1:
    num += 1
print(num)

输入中N<=2^30,所以九个0就够用了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值