python-3.x 从1到n数9

0yg35tkg  于 2023-01-06  发布在  Python
关注(0)|答案(3)|浏览(168)

我试着从1到n计算所有的9,包括重复的数字,比如99。我的代码(python 3)工作正常,除了非常大的数字(比如20位数),大多数情况下都会返回正确的答案。有人能帮助我,让我知道这是怎么做到的吗?谢谢。

def count_nines(n):
count = 0
num = [i for i in str(n)]

while len(num) > 0:
    if len(num) == 1:
        if num[0] == '9':
            count += 1
    else:
        count += int(num[0]) * int(str(len(num)-1).ljust(len(num)-1, '0'))
        if num[0] == '9':
            count += int(''.join(num[1:]))+1
    num.pop(0)

return count
svujldwt

svujldwt1#

问题出在这个表达式中:

int(str(len(num)-1).ljust(len(num)-1, '0'))

只要str(len(num)-1)是一个字符,这种方法就可以正常工作,但是当len(num) > 10是一个字符时,就不再是这种情况了,ljust添加的零将比需要的少。实际上,您总是希望在len(num)-2中追加零。因此,将此表达式更改为:

int(str(len(num)-1) + '0' * (len(num)-2))
arknldoa

arknldoa2#

简而言之:

def count_nines(n):
count = 0
for i in range(n+1):
    if "9" in [*str(i)]:
        count = count + str(i).count('9')
return count

相关问题