📅  最后修改于: 2023-12-03 15:35:27.169000             🧑  作者: Mango
问题描述:编写一个程序,计算并输出从1到n的所有自然数中,每个数字出现的次数的和。
输入:一个整数n,1<=n<=10^6。
输出:一个整数,代表自然数1到n中每个数字出现的次数的和。
遍历1到n的每个数字,将数字转换成字符串并遍历字符串中每个字符,统计每个字符出现的次数。最后将所有字符出现次数的和相加返回。
def count_digits(n: int) -> int:
digits_count = [0] * 10
for i in range(1, n+1):
for digit in str(i):
digits_count[int(digit)] += 1
return sum(digits_count)
第1行定义了一个函数count_digits
,它接收一个整数n
作为输入,返回一个整数。
第2行初始化一个长度为10的列表digits_count
,用于统计每个数字出现的次数。列表初始化为全0。
第3行到第6行对1到n的每个数字进行处理,遍历字符串表示的数字,并将每个数字的每个字符出现次数统计到digits_count
中。
第7行返回所有数字出现的次数之和。
上述程序计算自然数1到n中每个数字出现的次数的和。可以使用如下命令进行测试:
assert count_digits(0) == 0
assert count_digits(9) == 45
assert count_digits(10) == 55
assert count_digits(11) == 66
assert count_digits(111) == 321
assert count_digits(12345) == 66660