【每日一题1012】统计页码数字

:woman_mage: 赫敏在一家印刷公司上班,她的一项工作就是统计一本书籍页码中包含的所有页码数字的个数(从1开始,包含结束页码)。比如,一本4页的书包含4个页码数字(1,2,3,4)。请编写一个函数,给定一个页数,求出一共出现的数字个数。

示例:
输入:4,输出:4。因为页数是1,2,3,4
输入:12,输出:15,因为1-9页共9个数字,10,11,12各有2各数字。

题目难度:简单
题目来源:codewars

def page_digits(n: int) -> int:
    pass

assert page_digits(4) == 4
assert page_digits(12) == 15
assert page_digits(100) == 192
def page_digits(n):
    sum_digits = 0
    for num in range(1,n+1):
        sum_digits +=len(str(num))
    return sum_digits


assert page_digits(4) == 4
assert page_digits(12) == 15
assert page_digits(100) == 192
def page_digits(n: int) -> int:
    return sum([len(str(i)) for i in range(1, n + 1)])


assert page_digits(4) == 4
assert page_digits(12) == 15
assert page_digits(100) == 192
def page_digits(n: int) -> int:
    # 定义不同位数9的列表
    sizeTable = [9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, 9999999999]
    # 获取数字位数的方法
    def sizeOfInt(x: int):
        for i in range(len(sizeTable)):
            if x <= sizeTable[i]:
                return i+1
    # 获取传入数字的位数
    size = sizeOfInt(n)
    # 定义返回值
    result = None
    # 循环判断位数是否大于0
    while size > 0:
        if result is None:
            # 如果返回值未赋值,则进行首次赋值
            result = n * size
        else:
            # 返回值减去列表对应位数的9
            result = result - sizeTable[size-1]
        # 位数 -1
        size = size - 1
    return result

assert page_digits(4) == 4
assert page_digits(12) == 15
assert page_digits(100) == 192
assert page_digits(12345) == 50619
assert page_digits(12345678) == 87654321
assert page_digits(123456789) == 999999999
def page_digits(n: int) -> int:
    count = 0
    while True:
        # 获取当前共有多少位数字
        length = len(str(n))
        if length == 1:
            # 仅剩个位数时,直接加上并返回
            count += n
            return count
        surplus_num = int((length-1) * '9')
        # 减去比当前位数少一位的最大值, 即当前长度的数字有多少个
        now_num = n - surplus_num
        count += now_num * length
        # 将剩下的数字赋值给n 再次进行处理 直到仅剩一位数
        n = surplus_num

assert page_digits(4) == 4
assert page_digits(100) == 192
assert page_digits(999999999) == 8888888889
1 Like
def page_digits(n: int) -> int:
    return len(''.join([str(i) for i in range(1,n+1)]))

assert page_digits(4) == 4
assert page_digits(12) == 15
assert page_digits(100) == 192
def page_digits(n: int) -> int:
    list = []
    for i in range(1, n + 1):
        list.append(len(str(i)))
    return sum(list)


assert page_digits(4) == 4
assert page_digits(12) == 15
assert page_digits(100) == 192
关闭