mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
Added HappyNumber algorithm in maths section (#6571)
* Added HappyNumber algorithm in maths section * Fix Checkstyle: remove trailing spaces in HappyNumber * Fix formatting: remove trailing spaces and apply clang-format * Update HappyNumberTest.java * Removed old HappyNumbersSeq.java as replaced by new HappyNumber.java
This commit is contained in:
57
src/main/java/com/thealgorithms/maths/HappyNumber.java
Normal file
57
src/main/java/com/thealgorithms/maths/HappyNumber.java
Normal file
@@ -0,0 +1,57 @@
|
||||
package com.thealgorithms.maths;
|
||||
|
||||
/**
|
||||
* A Happy Number is defined as a number which eventually reaches 1 when replaced
|
||||
* by the sum of the squares of each digit.
|
||||
* If it falls into a cycle that does not include 1, then it is not a happy number.
|
||||
|
||||
* Example:
|
||||
* 19 → 1² + 9² = 82
|
||||
* 82 → 8² + 2² = 68
|
||||
* 68 → 6² + 8² = 100
|
||||
* 100 → 1² + 0² + 0² = 1 → Happy Number!
|
||||
*/
|
||||
public final class HappyNumber {
|
||||
|
||||
private HappyNumber() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given number is a Happy Number.
|
||||
* Uses Floyd’s Cycle Detection algorithm (tortoise and hare method)
|
||||
* to detect loops efficiently.
|
||||
*
|
||||
* @param n The number to check
|
||||
* @return true if n is a Happy Number, false otherwise
|
||||
*/
|
||||
public static boolean isHappy(int n) {
|
||||
int slow = n;
|
||||
int fast = n;
|
||||
|
||||
do {
|
||||
slow = sumOfSquares(slow); // move 1 step
|
||||
fast = sumOfSquares(sumOfSquares(fast)); // move 2 steps
|
||||
} while (slow != fast);
|
||||
|
||||
return slow == 1; // If cycle ends in 1 → Happy number
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the sum of squares of the digits of a number.
|
||||
*
|
||||
* Example:
|
||||
* num = 82 → 8² + 2² = 64 + 4 = 68
|
||||
*
|
||||
* @param num The number to calculate sum of squares of digits
|
||||
* @return The sum of squares of the digits
|
||||
*/
|
||||
private static int sumOfSquares(int num) {
|
||||
int sum = 0;
|
||||
while (num > 0) {
|
||||
int digit = num % 10;
|
||||
sum += digit * digit;
|
||||
num /= 10;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user