Un número feliz n se define mediante el siguiente proceso. Comenzando con n, reemplácelo con la suma de los cuadrados de sus dígitos y repita el proceso hasta que n sea igual a 1, o se repite sin fin en un ciclo que no incluye 1. Los números para los que este proceso termina en 1 son Números Felices , mientras que los que no terminan en 1 son números infelices.
Los primeros números felices son 1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100
Ejemplos:
Input : 23 Output : Yes Explanation : First Iteration: 22 + 32 = 4 + 9 = 13 Second Iteration: 12 + 32 = 1 + 9 = 10 Third Iteration: 12 + 02 = 1 + 0 = 1 Since we reach 1, 23 is Happy.
La idea es simple, repetimos hacer suma de cuadrados de dígitos. Al hacerlo, hacemos un seguimiento de los números visitados mediante un hash. Si llegamos a 1, devolvemos verdadero. De lo contrario, si llegamos a un número visitado, devolvemos falso.
C++
// CPP program to check if a number // is happy number #include <bits/stdc++.h> using namespace std; // Returns sum of squares of digits // of a number n. For example for n = 12 // it returns 1 + 4 = 5 int sumDigitSquare(int n) { int sq = 0; while (n) { int digit = n % 10; sq += digit * digit; n = n / 10; } return sq; } // Returns true if n is Happy number // else returns false. bool isHappy(int n) { // A set to store numbers during // repeated square sum process set<int> s; s.insert(n); // Keep replacing n with sum of // squares of digits until we either // reach 1 or we endup in a cycle while (1) { // Number is Happy if we reach 1 if (n == 1) return true; // Replace n with sum of squares // of digits n = sumDigitSquare(n); // If n is already visited, a cycle // is formed, means not Happy if (s.find(n) != s.end()) return false; // Mark n as visited s.insert(n); } return false; } // Driver code int main() { int n = 23; if (isHappy(n)) cout << "Yes" << endl; else cout << "No" << endl; return 0; }
Java
// Java program to check if a number // is happy number import java.util.*; class GFG { // Returns sum of squares of digits // of a number n. For example for n = 12 // it returns 1 + 4 = 5 static int sumDigitSquare(int n) { int sq = 0; while (n > 0) { int digit = n % 10; sq += digit * digit; n = n / 10; } return sq; } // Returns true if n is Happy number // else returns false. static boolean isHappy(int n) { // A set to store numbers during // repeated square sum process HashSet<Integer> s = new HashSet<Integer>(); s.add(n); // Keep replacing n with sum of // squares of digits until we either // reach 1 or we endup in a cycle while (true) { // Number is Happy if we reach 1 if (n == 1) return true; // Replace n with sum of squares // of digits n = sumDigitSquare(n); // If n is already visited, a cycle // is formed, means not Happy if ((s.contains(n) && n != (int)s.toArray()[ s.size()-1 ] )) return false; // Mark n as visited s.add(n); } } // Driver code public static void main(String[] args) { int n = 23; if (isHappy(n)) System.out.println("Yes"); else System.out.println("No"); } } /* This code contributed by PrinciRaj1992 */
Python 3
# python program to check if a number # is happy number # Returns sum of squares of digits # of a number n. For example for n = 12 # it returns 1 + 4 = 5 def sumDigitSquare( n): sq = 0; while (n!=0): digit = n % 10 sq += digit * digit n = n // 10 return sq; # Returns true if n is Happy number # else returns false. def isHappy(n): # A set to store numbers during # repeated square sum process s=set() s.add(n) # Keep replacing n with sum of # squares of digits until we either # reach 1 or we endup in a cycle while (True): # Number is Happy if we reach 1 if (n == 1): return True; # Replace n with sum of squares # of digits n = sumDigitSquare(n) # If n is already visited, a cycle # is formed, means not Happy if n in s: return False # Mark n as visited s.add(n) return false; # Driver code n = 4 if (isHappy(n)): print("Yes") else: print("No")
C#
// C# program to check if a number // is happy number using System; using System.Collections.Generic; class GFG { // Returns sum of squares of digits // of a number n. For example for n = 12 // it returns 1 + 4 = 5 static int sumDigitSquare(int n) { int sq = 0; while (n > 0) { int digit = n % 10; sq += digit * digit; n = n / 10; } return sq; } // Returns true if n is Happy number // else returns false. static bool isHappy(int n) { // A set to store numbers during // repeated square sum process HashSet<int> s = new HashSet<int>(); s.Add(n); // Keep replacing n with sum of // squares of digits until we either // reach 1 or we endup in a cycle while (true) { // Number is Happy if we reach 1 if (n == 1) return true; // Replace n with sum of squares // of digits n = sumDigitSquare(n); // If n is already visited, a cycle // is formed, means not Happy if (s.Contains(n)) return false; // Mark n as visited s.Add(n); } } // Driver code public static void Main() { int n = 23; if (isHappy(n)) Console.WriteLine("Yes"); else Console.WriteLine("No"); } } // This code contributed by Rajput-Ji
Javascript
// JavaScript program to check if a number // is happy number // Returns sum of squares of digits // of a number n. For example for n = 12 // it returns 1 + 4 = 5 function sumDigitSquare(n) { let sq = 0; while (n > 0) { var digit = n % 10 sq += digit * digit; n = Math.floor(n / 10); } return sq; } // Returns true if n is Happy number // else returns false. function isHappy(n) { // A set to store numbers during // repeated square sum process let s = []; s.push(n); // Keep replacing n with sum of // squares of digits until we either // reach 1 or we endup in a cycle while (true) { // Number is Happy if we reach 1 if (n == 1) return true; // Replace n with sum of squares // of digits n = sumDigitSquare(n) // If n is already visited, a cycle // is formed, means not Happy if (s.includes(n)) return false // Mark n as visited s.push(n) } return false; } /// Driver code let n = 23 if (isHappy(n)) console.log("Yes") else console.log("No") // This code is contributed by phasing17
Producción:
Yes
Una observación importante es que el ciclo siempre contiene 4 . Así que no necesitamos hacer un seguimiento de todos los números. Simplemente podemos verificar 4.
C++
// A space optimized CPP program to check if a number is // happy number #include <bits/stdc++.h> using namespace std; // Returns sum of squares of digits of a number n. // For example for n = 12 it returns 1 + 4 = 5 int sumDigitSquare(int n) { int sq = 0; while (n) { int digit = n % 10; sq += digit * digit; n = n / 10; } return sq; } // Returns true if n is Happy number else returns false. bool isHappy(int n) { // Keep replacing n with sum of squares of digits until // we either reach 1 or we end up in a cycle while (1) { // Number is Happy if we reach 1 if (n == 1) return true; // Replace n with sum of squares of digits n = sumDigitSquare(n); // Number is not Happy if we reach 4 if (n == 4) return false; } return false; } // Driver code int main() { int n = 23; if (isHappy(n)) cout << "Yes" << endl; else cout << "No" << endl; return 0; } // This code is contributed by Sania Kumari Gupta (kriSania804)
C
// A space optimized C program to check if a number is happy // number #include <stdbool.h> #include <stdio.h> // Returns sum of squares of digits of a number n. // For example for n = 12 it returns 1 + 4 = 5 int sumDigitSquare(int n) { int sq = 0; while (n) { int digit = n % 10; sq += digit * digit; n = n / 10; } return sq; } // Returns true if n is Happy number else returns false. bool isHappy(int n) { // Keep replacing n with sum of squares of digits until // we either reach 1 or we end up in a cycle while (1) { // Number is Happy if we reach 1 if (n == 1) return true; // Replace n with sum of squares of digits n = sumDigitSquare(n); // Number is not Happy if we reach 4 if (n == 4) return false; } return false; } // Driver code int main() { int n = 23; if (isHappy(n)) printf("Yes\n"); else printf("No\n"); return 0; } // This code is contributed by Sania Kumari Gupta (kriSania804)
Java
// A space optimized Java // program to check if a // number is happy number import java.io.*; class GFG { // Returns sum of squares of // digits of a number n. For // example for n = 12 it // returns 1 + 4 = 5 static int sumDigitSquare(int n) { int sq = 0; while (n != 0) { int digit = n % 10; sq += digit * digit; n = n / 10; } return sq; } // Returns true if n is Happy // number else returns false. static boolean isHappy(int n) { // Keep replacing n with // sum of squares of digits // until we either reach 1 // or we end up in a cycle while (true) { // Number is Happy if // we reach 1 if (n == 1) return true; // Replace n with sum // of squares of digits n = sumDigitSquare(n); // Number is not Happy // if we reach 4 if (n == 4) return false; } } // Driver code public static void main(String args[]) { int n = 23; if (isHappy(n)) System.out.println("Yes"); else System.out.println("No" ); } } /*This code is contributed by Nikita tiwari.*/
Python3
# A space optimized Python3 program to # check if a number is happy number # Returns sum of squares of # digits of a number n. For # example for n = 12 it # returns 1 + 4 = 5 def sumDigitSquare(n) : sq = 0 while (n) : digit = n % 10 sq = sq + digit * digit n = n // 10 return sq # Returns true if n # is Happy number else # returns false. def isHappy(n) : # Keep replacing n with # sum of squares of digits # until we either reach 1 # or we end up in a cycle while (1) : # Number is Happy if # we reach 1 if (n == 1) : return True # Replace n with sum of # squares of digits n = sumDigitSquare(n) # Number is not Happy # if we reach 4 if (n == 4) : return False return False # Driver code n = 23 if (isHappy(n)) : print("Yes") else : print("No") # This code is contributed # by Nikita tiwari.
C#
// A space optimized C# // program to check if a // number is happy number using System; class GFG { // Returns sum of squares of // digits of a number n. For // example for n = 12 it // returns 1 + 4 = 5 static int sumDigitSquare(int n) { int sq = 0; while (n != 0) { int digit = n % 10; sq += digit * digit; n = n / 10; } return sq; } // Returns true if n is Happy // number else returns false. static bool isHappy(int n) { // Keep replacing n with // sum of squares of digits // until we either reach 1 // or we end up in a cycle while (true) { // Number is Happy if // we reach 1 if (n == 1) return true; // Replace n with sum // of squares of digits n = sumDigitSquare(n); // Number is not Happy // if we reach 4 if (n == 4) return false; } } // Driver code static public void Main () { int n = 23; if (isHappy(n)) Console.WriteLine("Yes"); else Console.WriteLine("No" ); } } // This code is contributed by ajit
PHP
<?php // A space optimized PHP // program to check if a // number is happy number // Returns sum of squares // of digits of a number // n. For example for n = 12 // it returns 1 + 4 = 5 function sumDigitSquare($n) { $sq = 0; while ($n) { $digit = $n % 10; $sq += $digit * $digit; $n = $n / 10; } return $sq; } // Returns true if n // is Happy number // else returns false. function isHappy($n) { // Keep replacing n with // sum of squares of digits // until we either reach 1 // or we end up in a cycle while (1) { // Number is Happy // if we reach 1 if ($n == 1) return true; // Replace n with sum // of squares of digits $n = sumDigitSquare($n); // Number is not Happy // if we reach 4 if ($n == 4) return false; } return false; } // Driver code $n = 23; if (isHappy($n)) echo "Yes"; else echo "No"; // This code is contributed by mits ?>
Javascript
<script> // A space optimized Javascript // program to check if a // number is happy number // Returns sum of squares of // digits of a number n. For // example for n = 12 it // returns 1 + 4 = 5 function sumDigitSquare(n) { let sq = 0; while (n != 0) { let digit = n % 10; sq += digit * digit; n = parseInt(n / 10, 10); } return sq; } // Returns true if n is Happy // number else returns false. function isHappy(n) { // Keep replacing n with // sum of squares of digits // until we either reach 1 // or we end up in a cycle while (true) { // Number is Happy if // we reach 1 if (n == 1) return true; // Replace n with sum // of squares of digits n = sumDigitSquare(n); // Number is not Happy // if we reach 4 if (n == 4) return false; } } let n = 23; if (isHappy(n)) document.write("Yes"); else document.write("No" ); </script>
Producción:
Yes
Complejidad del tiempo : O (log N) donde N no es ningún dígito de un número dado n
Espacio auxiliar : O(1)
Este artículo es una contribución de ashish madaan . 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