Un número de Kaprekar es un número cuyo cuadrado cuando se divide en dos partes y tal que la suma de las partes es igual al número original y ninguna de las partes tiene valor 0. (Fuente: Wiki )
Dado un número, la tarea es verificar si es el número de Kaprekar o no.
Ejemplos:
Input : n = 45 Output : Yes Explanation : 452 = 2025 and 20 + 25 is 45 Input : n = 13 Output : No Explanation : 132 = 169. Neither 16 + 9 nor 1 + 69 is equal to 13 Input : n = 297 Output : Yes Explanation: 2972 = 88209 and 88 + 209 is 297 Input : n = 10 Output : No Explanation: 102 = 100. It is not a Kaprekar number even if sum of 100 + 0 is 100. This is because of the condition that none of the parts should have value 0.
- Encuentre el cuadrado de n y cuente el número de dígitos en el cuadrado.
- Dividir cuadrados en diferentes posiciones y ver si la suma de dos partes en cualquier división se vuelve igual a n.
A continuación se muestra la implementación de la idea.
C++
//C++ program to check if a number is Kaprekar number or not #include<bits/stdc++.h> using namespace std; // Returns true if n is a Kaprekar number, else false bool iskaprekar(int n) { if (n == 1) return true; // Count number of digits in square int sq_n = n * n; int count_digits = 0; while (sq_n) { count_digits++; sq_n /= 10; } sq_n = n*n; // Recompute square as it was changed // Split the square at different points and see if sum // of any pair of splitted numbers is equal to n. for (int r_digits=1; r_digits<count_digits; r_digits++) { int eq_parts = pow(10, r_digits); // To avoid numbers like 10, 100, 1000 (These are not // Kaprekar numbers if (eq_parts == n) continue; // Find sum of current parts and compare with n int sum = sq_n/eq_parts + sq_n % eq_parts; if (sum == n) return true; } // compare with original number return false; } // Driver code int main() { cout << "Printing first few Kaprekar Numbers" " using iskaprekar()\n"; for (int i=1; i<10000; i++) if (iskaprekar(i)) cout << i << " "; return 0; }
Java
// Java program to check if a number is // Kaprekar number or not class GFG { // Returns true if n is a Kaprekar number, else false static boolean iskaprekar(int n) { if (n == 1) return true; // Count number of digits in square int sq_n = n * n; int count_digits = 0; while (sq_n != 0) { count_digits++; sq_n /= 10; } sq_n = n*n; // Recompute square as it was changed // Split the square at different points and see if sum // of any pair of splitted numbers is equal to n. for (int r_digits=1; r_digits<count_digits; r_digits++) { int eq_parts = (int) Math.pow(10, r_digits); // To avoid numbers like 10, 100, 1000 (These are not // Kaprekar numbers if (eq_parts == n) continue; // Find sum of current parts and compare with n int sum = sq_n/eq_parts + sq_n % eq_parts; if (sum == n) return true; } // compare with original number return false; } // Driver method public static void main (String[] args) { System.out.println("Printing first few Kaprekar Numbers" + " using iskaprekar()"); for (int i=1; i<10000; i++) if (iskaprekar(i)) System.out.print(i + " "); } }
Python3
# Python program to check if a number is Kaprekar number or not import math # Returns true if n is a Kaprekar number, else false def iskaprekar( n): if n == 1 : return True #Count number of digits in square sq_n = n * n count_digits = 1 while not sq_n == 0 : count_digits = count_digits + 1 sq_n = sq_n // 10 sq_n = n*n # Recompute square as it was changed # Split the square at different points and see if sum # of any pair of splitted numbers is equal to n. r_digits = 0 while r_digits< count_digits : r_digits = r_digits + 1 eq_parts = (int) (math.pow(10, r_digits)) # To avoid numbers like 10, 100, 1000 (These are not # Kaprekar numbers if eq_parts == n : continue # Find sum of current parts and compare with n sum = sq_n//eq_parts + sq_n % eq_parts if sum == n : return True # compare with original number return False # Driver method i=1 while i<10000 : if (iskaprekar(i)) : print (i,end=" ") i = i + 1 # code contributed by Nikita Tiwari
C#
// C# program to check if a number is // Kaprekar number or not using System; class GFG { // Returns true if n is a Kaprekar // number, else false static bool iskaprekar(int n) { if (n == 1) return true; // Count number of digits // in square int sq_n = n * n; int count_digits = 0; while (sq_n != 0) { count_digits++; sq_n /= 10; } // Recompute square as it was changed sq_n = n * n; // Split the square at different points // and see if sum of any pair of splitted // numbers is equal to n. for (int r_digits = 1; r_digits < count_digits; r_digits++) { int eq_parts = (int)Math.Pow(10, r_digits); // To avoid numbers like 10, 100, 1000 // These are not Kaprekar numbers if (eq_parts == n) continue; // Find sum of current parts and compare // with n int sum = sq_n / eq_parts + sq_n % eq_parts; if (sum == n) return true; } // compare with original number return false; } // Driver method public static void Main() { Console.WriteLine("Printing first few " + "Kaprekar Numbers using iskaprekar()"); for (int i = 1; i < 10000; i++) if (iskaprekar(i)) Console.Write(i + " "); } } // This code is contributed by vt_m.
PHP
<?php // PHP program to check if a number // is Kaprekar number or not // Returns true if n is a Kaprekar // number, else false function iskaprekar($n) { if ($n == 1) return true; // Count number of digits // in square $sq_n = $n * $n; $count_digits = 0; while ($sq_n) { $count_digits++; $sq_n = (int)($sq_n / 10); } $sq_n1 = $n * $n; // Recompute square // as it was changed // Split the square at different // points and see if sum of any // pair of splitted numbers is equal to n. for ($r_digits = 1; $r_digits < $count_digits; $r_digits++) { $eq_parts = pow(10, $r_digits); // To avoid numbers like // 10, 100, 1000 (These are not // Kaprekar numbers if ($eq_parts == $n) continue; // Find sum of current parts // and compare with n $sum = (int)($sq_n1 / $eq_parts) + $sq_n1 % $eq_parts; if ($sum == $n) return true; } // compare with original number return false; } // Driver code echo "Printing first few Kaprekar " . "Numbers using iskaprekar()\n"; for ($i = 1; $i < 10000; $i++) if (iskaprekar($i)) echo $i . " "; // This code is contributed by mits ?>
Javascript
<script> // Javascript program to check if a number // is Kaprekar number or not // Returns true if n is a Kaprekar // number, else false function iskaprekar(n) { if (n == 1) return true; // Count number of digits // in square let sq_n = n * n; let count_digits = 0; while (sq_n) { count_digits++; sq_n = parseInt(sq_n / 10); } let sq_n1 = n * n; // Recompute square // as it was changed // Split the square at different // points and see if sum of any // pair of splitted numbers is equal to n. for (let r_digits = 1; r_digits < count_digits; r_digits++) { let eq_parts = Math.pow(10, r_digits); // To avoid numbers like // 10, 100, 1000 (These are not // Kaprekar numbers if (eq_parts == n) continue; // Find sum of current parts // and compare with n let sum = parseInt((sq_n1 / eq_parts) + sq_n1 % eq_parts); if (sum == n) return true; } // compare with original number return false; } // Driver code document.write("Printing first few Kaprekar " + "Numbers using iskaprekar()<br>"); for (let i = 1; i < 10000; i++) if (iskaprekar(i)) document.write(i + " "); // This code is contributed by _saurabh_jaiswal </script>
Producción:
Printing first few Kaprekar Numbers using iskaprekar() 1 9 45 55 99 297 703 999 2223 2728 4879 4950 5050 5292 7272 7777 9999
Referencia:
https://en.wikipedia.org/wiki/Kaprekar_number
Artículo relacionado:
Kaprekar Constant
Este artículo es una contribución de Sahil Chhabra (KILLER) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA