数字序列中某一位的数字

"""
    012345678910...序列中,第n位数
"""

def solution(n):
    if n < 0:
        return -1
    if n < 10:
        return n

    i = 2  # 确定是第几位数
    sums = 10
    ret = 0
    while True:
        # 一位数 0~9 共10个字符
        # 两位数 10~99 共180个字符
        # 三位数 100~999 共2700个字符
        sums += ((10 ** i) - 10 ** (i - 1)) * i
        if sums > n:
            tmp = n - (sums - ((10 ** i) - 10 ** (i - 1)) * i)
            numbers = (10 ** (i - 1)) + tmp // i  # 得到第n位是第几个数字
            flag = tmp % i  # 确定第n位在当前数字中的位置
            while i - flag - 1 > 0:
                numbers //= 10
                flag += 1
            ret = numbers % 10
            return ret
        else:
            i += 1

print(solution(1001))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值