Estoy tratando de contar los 9 en números del 1 al n, incluidos los dígitos repetidos como en 99. Mi código (python 3) funciona y devuelve la respuesta correcta para la mayoría de los casos, excepto para números muy grandes (como números de 20 dígitos). ¿Podría alguien ayudarme y decirme cómo es posible? Gracias.

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
-1
DLord 10 may. 2021 a las 12:27

1 respuesta

La mejor respuesta

El problema está en esta expresión:

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

Esto funciona bien siempre que str(len(num)-1) sea un carácter, pero cuando len(num) > 10, este ya no es el caso, y luego ljust agregará menos ceros de los necesarios. De hecho, siempre desea agregar ceros len(num)-2. Así que cambia esta expresión a:

int(str(len(num)-1) + '0' * (len(num)-2))
0
trincot 10 may. 2021 a las 17:06