Ir al contenido principal

Vamos a realizar el ejercicio de verificar si un número es Kaprekar o no, así que primero veamos:


Qué es un número Kaprekar?

Todo número entero no negativo (n) que cuando se eleva al cuadrado, su número resultante puede ser dividido en 2 partes a y b donde a + b = n. Teniendo en cuenta que ni a ni b pueden ser cero.


Ejemplos

n = 9

9² = 81

8 + 1 = 9 (si cumple por lo tanto es Kaprekar)


n = 297

9² = 88209

8820 + 9 = 8829 (no cumple)

882 + 9 = 891 (no cumple)

88 + 209 = 297 (si cumple por lo tanto es Kaprekar)


n=143

143² = 20449

2 + 0449 = 451 (no cumple)

20 + 449 = 469 (no cumple)

204 + 49 = 253 (no cumple)

2044 + 9 = 2053 (no cumple)

Como ninguna de la suma de sus divisiones dió el número original entonces no es número kaprekar.


Lógica

Lo primero que haremos es solicitar un número por consola, elevarlo al cuadrado y convertirlo a string:

numero = input("Ingrese un numero:")

elevado = str(int(math.pow(numero, 2)))


Con el número convertido a string lo podemos tratar como si se tratase de una matriz.

 La idea es dividir esta matriz en dos partes dentro de un bucle  una que empiece en el primer número y vaya creciendo hasta el penúltimo y la segunda parte que sea el complemento de la primera.


Teniendo las dos partes la podemos sumar y verificar si el número resultante el igual al original


for i in range(len(elevado) - 1):

numero1 = int(elevado[:i + 1])

numero2 = int(elevado[i + 1:])

suma = numero1 + numero2

print '{} + {} = {}'.format(numero1, numero2, suma)

if suma == numero:

return True

Teniendo en cuenta que ninguna de las dos partes sea igual a cero.


Código Completo

https://gist.github.com/bit3000tech/2911fd1199e6375f948ca8618f4c0eb3


Comentarios