In this article, we are going to learn to find Happy Number
using Java. Let’s first understand, what is Happy Number?
Table of Contents
What is a Happy Number?
A number which leaves 1 as a result after a sequence of steps and in each step number is replaced by the sum of squares of its digit. For example, if we check whether 23
is a Happy Number, then sequence of steps are
Step 1:
2×2+3×3 = 4+9 = 13 // Sum of square of each digit
Step 2:
1×1+3×3 = 1+9 = 10
Step 3:
1×1+0x0 = 1 (A Happy Number)
We will see two approaches to find happy number in java.
Using Hashset
In this approach, we will use Hashset to tract the cycle and if sum=1
at the end of the cycle, then it is happy number.
Algorithm
- Take one variable
sum
for storing sum of square. - Intialize a HashSet
numbers
, we will use this HashSet to track repeating cycle. - Iteate through while loop until we get same number again and do following:
- Calculate the square of each digit present in the number and add it to the variable
sum
and divide thenumber
by 10. - Assign
sum
tonumber
after each iteration
- Calculate the square of each digit present in the number and add it to the variable
- If result
sum
is equal to 1, then the number is aHappy Number
. - Else the number is not happy Number.
Note: A number can not be a Happy Number if it makes a loop in its sequence. For example,
12345678910111213141516171819 4x4 = 161x1+6x6 = 373x3+7x7 = 585x5+8x8 = 898x8+9x9 = 1451x1+4x4+5x5 = 424x4+2x2 = 202x2+0x0 = 4 // Number itself4 = 16 // Repeating process (loop), see step 1
Example
Here is complete example to find Happy number in java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.util.HashSet; import java.util.Set; public class Main { public static void main(String args[]) { int number = 1111111; int sum = 0; Set<Integer> numbers = new HashSet<Integer>(); while(numbers.add(number)){ sum = 0; while(number>0) { sum += (number % 10)*(number % 10); number /=10; } number = sum; } // if sum = 1, it is happy number if(sum == 1) { System.out.println("It is a happy number"); }else { System.out.println("It is not a happy number"); } } } |
Output
Using slow and fast pointers
In this approach, we will use slow and fast pointer to track the cycle.
Algorithm
- initialize two variables
slow
andfast
with given number. - Iterate through do while loop until we get a cycle (
slow!=fast
)- Move
slow
pointer once by callinggetSumOfSquareOfDigit()
once. - Move
fast
pointer twice by callinggetSumOfSquareOfDigit()
twice.
- Move
- If
slow
is equal to 1 at the end of cycle, it means it ishappy number
.
Example
Here is complete example to find Happy number in java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
package org.arpit.java2blog; public class HappyNumberSlowFast { static int getSumOfSquareOfDigit(int num) { int ss = 0; while (num != 0) { ss += (num % 10) * (num % 10); num /= 10; } return ss; } // method return true if n is Happy number static boolean isHappynumber(int num) { int slow, fast; // initialize slow and fast by num slow = fast = num; do { // move slow number by one step slow = getSumOfSquareOfDigit(slow); // move fast number by two steps fast = getSumOfSquareOfDigit(getSumOfSquareOfDigit(fast)); } while (slow != fast); // If slow and fast point meet and slow is equals to 1, // then it is happy number return (slow == 1); } // Main method public static void main(String[] args) { int n = 1111111; if (isHappynumber(n)) System.out.println(n + " is a Happy number"); else System.out.println(n + " is not a Happy number"); } } |
Output
That’s all about How to find Happy Number in Java