# Happy Numbers

A Happy Number n is defined by the following process. Starting with n, replace it with the sum of the squares of its digits, and repeat the process until n equals 1, or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are Happy Numbers, while those that do not end in 1 are unhappy numbers.

First few happy numbers are 1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100

Examples:

```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.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The idea is simple, we repeated do sum of squares of digits. While doing so, we keep track of visited numbers using a hash. If we reach 1, we return true. Else if we reach a visited a number, we return false.

## C++

 `// CPP program to check if a number ` `// is happy number ` `#include ` `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 s = ``new` `HashSet(); ` `    ``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 `

Output:

```Yes
```

One important observation is, the cycle always contains 4. So we don’t need to keep track of all numbers. We can simply check for 4.

## C++

 `// A space optimized CPP program to check  ` `// if a number is happy number ` `#include ` `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; ` `} `

## 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

 ` `

Output:

```Yes
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Article Tags :

5

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.