Cálculo del número de persistencia de un entero.

Estoy tratando de hacer un código que haga lo siguiente:

Al multiplicar los dígitos de un número entero y continuar el proceso, se obtiene el sorprendente resultado de que la secuencia de productos siempre llega a un número de un solo dígito.

Por ejemplo:

715 -> 35 -> 15 -> 5 88 -> 64 -> 24 -> 8 27 -> 14 -> 4 

El número de productos necesarios para alcanzar el número de un solo dígito se llama el número de persistencia de ese número entero. Por lo tanto, 715 y 88 tienen un número de persistencia de 3, mientras que 27 tiene persistencia 2. ¿Cree un progtwig para encontrar el único número de dos dígitos con una persistencia mayor que 3?

Tuve una idea aproximada y el código está abajo, pero no parece funcionar:

 num2=0 num3=0 num4=0 num=input("what is your number?") while num in range(10,100): print 'step1' num1=num%10*num/10 if num1-10>10: print 'step2' num2=num1%10*num1/10 elif num2-num1>10: print 'step3' num3=num2%10*num2/10 elif num3-num2>10: print 'step4' num4=num3%10*num3/10 elif num4-num3>10: print 'step5' print num4 else: break 

El progtwig es Python y simplemente no puedo resolver esto. Si alguien pudiera ayudarme, lo apreciaría enormemente.

Debe usar un tiempo o un ciclo para multiplicar los dígitos en lugar de codificar de forma rígida qué hacer con los dígitos primero, segundo y así sucesivamente.

En pseudocódigo …

 productSoFar = 1 digitsLeftToMultipy = #the number while there are digits left to multiply: get the next digit and update produtsSoFar and digitsLeftToMultiply 

Además, usar

 10 <= n < 100 

en lugar de

 n in range(10, 100) 

Así que solo hace un par de comparaciones en lugar de una búsqueda secuencial que toma un tiempo proporcional a la longitud del rango.

Las funciones son amigos.

Considere una función, getEnds(x) , que cuando pasa un entero, x extrae el primer dígito y el último dígito (como enteros) y devuelve el resultado como una tupla en la forma (first_digit, last_digit) . Si x es un número de un solo dígito, la tupla contendrá un elemento y estará en la forma (x) , de lo contrario será dos. (Una forma sencilla de hacer esto es convertir el número en una cadena, extraer el primer / último dígito como una cadena, y luego convertir dichas cadenas de nuevo en números … sin embargo, hay muchas maneras: solo asegúrese de respetar el contrato de funciones, como se indicó anteriormente y, con suerte, en la documentación de funciones.)

Entonces, donde n es el número actual, estamos encontrando la persistencia para:

 ends = getEnds(n) while ends contains two elements n = first element of ends times second element of ends ends = getEnds(n) # while terminates when ends contained only one element # now it's only a matter of "counting" the persistence 

Para los puntos agregados, asegúrese de que esto se encuentre en una función – [an] llamada / documentada apropiadamente también y considere el uso de una función recursiva en lugar de un ciclo while.

Feliz codificacion

Si está intentando obtener los dígitos de un número, conviértalo primero en una cadena y haga referencia a ellos con notación de matriz.