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
Publicar un comentario