我试着从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
3条答案
按热度按时间svujldwt1#
问题出在这个表达式中:
只要
str(len(num)-1)
是一个字符,这种方法就可以正常工作,但是当len(num) > 10
是一个字符时,就不再是这种情况了,ljust
添加的零将比需要的少。实际上,您总是希望在len(num)-2
中追加零。因此,将此表达式更改为:arknldoa2#
简而言之:
olmpazwi3#
第一个月