A number is called happy if it leads to 1 after a sequence of steps wherein each step number is replaced by the sum of squares of its digit that is if we start with Happy Number and keep replacing it with digits square sum, we reach 1.
Examples :
Input: n = 19
Output: True
19 is Happy Number,
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
As we reached to 1, 19 is a Happy Number.
Input: n = 20
Output: False
A number will not be a Happy Number when it makes a loop in its sequence that is it touches a number in sequence which already been touched. So to check whether a number is happy or not, we can keep a set, if the same number occurs again we flag result as not happy. A simple function on the above approach can be written as below –
C++
// method return true if n is Happy Number
int numSquareSum(int n) {
int num = 0;
while (n != 0) {
int digit = n % 10;
num += digit * digit;
n /= 10;
}
return num;
}
int isHappyNumber(int n)
{
set<int> st;
while (1)
{
n = numSquareSum(n);
if (n == 1)
return true;
if (st.find(n) != st.end())
return false;
st.insert(n);
}
}
Java
// method return true if n is Happy Number
public static int numSquareSum(int n)
{
int num = 0;
while (n != 0) {
int digit = n % 10;
num += digit * digit;
n /= 10;
}
return num;
}
static boolean isHappyNumber(int n)
{
HashSet<Integer> st = new HashSet<>();
while (true) {
n = numSquareSum(n);
if (n == 1)
return true;
if (st.contains(n))
return false;
st.add(n);
}
}
// This code is contributed by Princi Singh
Python
# method return true if n is Happy Number
def numSquareSum(n):
num = 0
while(n):
digit = n % 10
num = num + digit*digit
n = n // 10
return num
def isHappyNumber(n):
st = set()
while (1):
n = numSquareSum(n)
if (n == 1):
return True
if n not in st:
return False
st.insert(n)
C#
// Method return true if n is Happy Number
static int numSquareSum(int n)
{
int num = 0;
while (n != 0) {
int digit = n % 10;
num += digit * digit;
n /= 10;
}
return num;
}
static int isHappyNumber(int n)
{
HashSet<int> st = new HashSet<>();
while (1) {
n = numSquareSum(n);
if (n == 1)
return true;
if (st.Contains(n))
return false;
st.Add(n);
}
}
// This code is contributed by 29AjayKumar
JavaScript
<script>
// method return true if n is Happy Number
function numSquareSum(n) {
let num = 0;
while (n !== 0) {
let digit = n % 10;
num += digit * digit;
n = Math.floor(n / 10);
}
return num;
}
let st = new Set();
while (1)
{
n = numSquareSum(n);
if (n == 1)
return true;
if (st.has(n))
return false;
st.add(n);
}
}
//This code is contributed by Mayank Tyagi
</script>
Complexity Analysis:
Time Complexity: O(n*log(n)).
Auxiliary Space: O(n) since using extra set for storage
We can solve this problem without using extra space and that technique can be used in some other similar problems also. If we treat every number as a node and replacement by square sum digit as a link, then this problem is same as finding a loop in a linklist :
So as a proposed solution from the above link, we will keep two numbers slow and fast both initialize from a given number, slow is replaced one step at a time and fast is replaced two steps at a time. If they meet at 1, then the given number is Happy Number otherwise not.
C++
// C++ program to check a number is a Happy number or not
#include <bits/stdc++.h>
using namespace std;
// Utility method to return sum of square of digit of n
int numSquareSum(int n)
{
int squareSum = 0;
while (n) {
squareSum += (n % 10) * (n % 10);
n /= 10;
}
return squareSum;
}
// method return true if n is Happy number
bool isHappynumber(int n)
{
int slow, fast;
// initialize slow and fast by n
slow = fast = n;
do {
// move slow number by one iteration
slow = numSquareSum(slow);
// move fast number by two iteration
fast = numSquareSum(numSquareSum(fast));
} while (slow != fast);
// if both number meet at 1, then return true
return (slow == 1);
}
// Driver code to test above methods
int main()
{
int n = 13;
if (isHappynumber(n))
cout << n << " is a Happy number\n";
else
cout << n << " is not a Happy number\n";
}
// This code is contributed by divyeshrabadiya07
C
// C program to check a number is a Happy number or not
#include <stdbool.h>
#include <stdio.h>
// Utility method to return sum of square of digit of n
int numSquareSum(int n)
{
int squareSum = 0;
while (n) {
squareSum += (n % 10) * (n % 10);
n /= 10;
}
return squareSum;
}
// method return true if n is Happy number
bool isHappynumber(int n)
{
int slow, fast;
// initialize slow and fast by n
slow = fast = n;
do {
// move slow number by one iteration
slow = numSquareSum(slow);
// move fast number by two iteration
fast = numSquareSum(numSquareSum(fast));
} while (slow != fast);
// if both number meet at 1, then return true
return (slow == 1);
}
// Driver code to test above methods
int main()
{
int n = 13;
if (isHappynumber(n))
printf("%d is a Happy number\n", n);
else
printf("%d is not a Happy number\n", n);
}
// This code is contributed by Sania Kumari Gupta
// (kriSania804)
Java
// Java program to check a number is a Happy
// number or not
class GFG {
// Utility method to return sum of square of
// digit of n
static int numSquareSum(int n)
{
int squareSum = 0;
while (n!= 0)
{
squareSum += (n % 10) * (n % 10);
n /= 10;
}
return squareSum;
}
// method return true if n is Happy number
static boolean isHappynumber(int n)
{
int slow, fast;
// initialize slow and fast by n
slow = fast = n;
do
{
// move slow number
// by one iteration
slow = numSquareSum(slow);
// move fast number
// by two iteration
fast = numSquareSum(numSquareSum(fast));
}
while (slow != fast);
// if both number meet at 1,
// then return true
return (slow == 1);
}
// Driver code to test above methods
public static void main(String[] args)
{
int n = 13;
if (isHappynumber(n))
System.out.println(n +
" is a Happy number");
else
System.out.println(n +
" is not a Happy number");
}
}
Python
# Python3 program to check if a number is a Happy number or not
# Utility method to return the sum of squares of digits of n
def num_square_sum(n):
square_sum = 0
while n:
square_sum += (n % 10) ** 2
n //= 10
return square_sum
# Method returns True if n is a Happy number
def is_happy_number(n):
# Initialize slow and fast pointers
slow = n
fast = n
while True:
# Move slow pointer by one iteration
slow = num_square_sum(slow)
# Move fast pointer by two iterations
fast = num_square_sum(num_square_sum(fast))
if slow != fast:
continue
else:
break
# If both pointers meet at 1, then return True
return slow == 1
# Driver Code
n = 13
if is_happy_number(n):
print(n, "is a Happy number")
else:
print(n, "is not a Happy number")
C#
// C# program to check a number
// is a Happy number or not
using System;
class GFG {
// Utility method to return
// sum of square of digit of n
static int numSquareSum(int n)
{
int squareSum = 0;
while (n!= 0)
{
squareSum += (n % 10) *
(n % 10);
n /= 10;
}
return squareSum;
}
// method return true if
// n is Happy number
static bool isHappynumber(int n)
{
int slow, fast;
// initialize slow and
// fast by n
slow = fast = n;
do
{
// move slow number
// by one iteration
slow = numSquareSum(slow);
// move fast number
// by two iteration
fast = numSquareSum(numSquareSum(fast));
}
while (slow != fast);
// if both number meet at 1,
// then return true
return (slow == 1);
}
// Driver code
public static void Main()
{
int n = 13;
if (isHappynumber(n))
Console.WriteLine(n +
" is a Happy number");
else
Console.WriteLine(n +
" is not a Happy number");
}
}
// This code is contributed by anuj_67.
JavaScript
<script>
// Javascript program to check a number is a Happy
// number or not
// Utility method to return sum of square of
// digit of n
function numSquareSum(n)
{
var squareSum = 0;
while (n!= 0)
{
squareSum += (n % 10) * (n % 10);
n = parseInt(n/10);
}
return squareSum;
}
// method return true if n is Happy number
function isHappynumber(n)
{
var slow, fast;
// initialize slow and fast by n
slow = fast = n;
do
{
// move slow number
// by one iteration
slow = numSquareSum(slow);
// move fast number
// by two iteration
fast = numSquareSum(numSquareSum(fast));
}
while (slow != fast);
// if both number meet at 1,
// then return true
return (slow == 1);
}
// Driver code to test above methods
var n = 13;
if (isHappynumber(n))
document.write(n +
" is a Happy number");
else
document.write(n +
" is not a Happy number");
// This code contributed by Princi Singh
</script>
PHP
<?php
// PHP program to check a number
// is a Happy number or not
// Utility method to return
// sum of square of digit of n
function numSquareSum( $n)
{
$squareSum = 0;
while ($n)
{
$squareSum += ($n % 10) *
($n % 10);
$n /= 10;
}
return $squareSum;
}
// method return true if
// n is Happy number
function isHappynumber( $n)
{
$slow; $fast;
// initialize slow
// and fast by n
$slow = $n;
$fast = $n;
do
{
// move slow number
// by one iteration
$slow = numSquareSum($slow);
// move fast number
// by two iteration
$fast = numSquareSum(numSquareSum($fast));
}
while ($slow != $fast);
// if both number meet at 1,
// then return true
return ($slow == 1);
}
// Driver Code
$n = 13;
if (isHappynumber($n))
echo $n , " is a Happy number\n";
else
echo n , " is not a Happy number\n";
// This code is contributed by anuj_67.
?>
Output :
13 is a Happy Number
Complexity Analysis:
Time Complexity: O(n*log(n)).
Auxiliary Space: O(1).
Another approach for solving this problem using no extra space.
A number cannot be a happy number if, at any step, the sum of the square of digits obtained is a single-digit number except 1 or 7. This is because 1 and 7 are the only single-digit happy numbers. Using this information, we can develop an approach as shown in the code below -
C++
// C++ program to check if a number is a Happy number or
// not.
#include <bits/stdc++.h>
using namespace std;
// Method - returns true if the input is a happy number else
// returns false
bool isHappynumber(int n)
{
int sum = n, x = n;
// This loop executes till the sum of square of digits
// obtained is not a single digit number
while (sum > 9) {
sum = 0;
// This loop finds the sum of square of digits
while (x > 0) {
int d = x % 10;
sum += d * d;
x /= 10;
}
x = sum;
}
if (sum == 7 || sum == 1)
return true;
return false;
}
int main()
{
int n = 13;
if (isHappynumber(n))
cout << n << " is a Happy number";
else
cout << n << " is not a Happy number";
return 0;
}
// This code is contributed by Sania Kumari Gupta
C
// C program to check if a number is a Happy number or
// not.
#include <stdbool.h>
#include <stdio.h>
// Method - returns true if the input is a happy number else
// returns false
bool isHappynumber(int n)
{
int sum = n, x = n;
// This loop executes till the sum of square of digits
// obtained is not a single digit number
while (sum > 9) {
sum = 0;
// This loop finds the sum of square of digits
while (x > 0) {
int d = x % 10;
sum += d * d;
x /= 10;
}
x = sum;
}
if (sum == 7 || sum == 1)
return true;
return false;
}
int main()
{
int n = 13;
if (isHappynumber(n))
printf("%d is a Happy number", n);
else
printf("%d is not a Happy number", n);
return 0;
}
// This code is contributed by Sania Kumari Gupta
Java
// This code is contributed by Vansh Sodhi.
// Java program to check if a number is a Happy number or
// not.
class GFG {
// method - returns true if the input is a happy
// number else returns false
static boolean isHappynumber(int n)
{
int sum = n, x = n;
// this loop executes till the sum of square of
// digits obtained is not a single digit number
while (sum > 9) {
sum = 0;
// this loop finds the sum of square of digits
while (x > 0) {
int d = x % 10;
sum += d * d;
x /= 10;
}
x = sum;
}
if (sum == 1 || sum == 7)
return true;
return false;
}
// Driver code
public static void main(String[] args)
{
int n = 13;
if (isHappynumber(n))
System.out.println(n + " is a Happy number");
else
System.out.println(n
+ " is not a Happy number");
}
}
Python
# Python3 program to check if a number is a Happy number or not.
# Method - returns true if the input is
# a happy number else returns false
def isHappynumber(n):
Sum, x = n, n
# This loop executes till the sum
# of square of digits obtained is
# not a single digit number
while Sum > 9:
Sum = 0
# This loop finds the sum of
# square of digits
while x > 0:
d = x % 10
Sum += d * d
x = int(x / 10)
x = Sum
if Sum == 1 or Sum == 7:
return True
return False
n = 13
if isHappynumber(n):
print(n, "is a Happy number")
else:
print(n, "is not a Happy number")
# This code is contributed by mukesh07.
C#
// C# program to check if a number
// is a Happy number or not.
using System;
class GFG {
// Method - returns true if the input is
// a happy number else returns false
static bool isHappynumber(int n)
{
int sum = n, x = n;
// This loop executes till the sum
// of square of digits obtained is
// not a single digit number
while (sum > 9) {
sum = 0;
// This loop finds the sum of
// square of digits
while (x > 0) {
int d = x % 10;
sum += d * d;
x /= 10;
}
x = sum;
}
if (sum == 1 || sum == 7)
return true;
return false;
}
// Driver code
public static void Main(String[] args)
{
int n = 13;
if (isHappynumber(n))
Console.WriteLine(n + " is a Happy number");
else
Console.WriteLine(n + " is not a Happy number");
}
}
// This code is contributed by 29AjayKumar
JavaScript
<script>
// This code is contributed by Vansh Sodhi.
// javascript program to check if a number is a Happy number or not.
// method - returns true if the input is a happy
// number else returns false
function isHappynumber(n)
{
var sum = n, x = n;
// this loop executes till the sum of square of
// digits obtained is not a single digit number
while(sum > 9)
{
sum = 0;
// this loop finds the sum of square of digits
while (x > 0)
{
var d = x % 10;
sum += d * d;
x /= 10;
}
x = sum;
}
if(sum == 1 || sum == 7)
return true;
return false;
}
// Driver code
var n = 13;
if (isHappynumber(n))
document.write(n +
" is a Happy number");
else
document.write(n +
" is not a Happy number");
// This code is contributed by 29AjayKumar
</script>
Output13 is a Happy number
Complexity Analysis:
Time Complexity: O(n*log(n)).
Auxiliary Space: O(1).
See your article appearing on the GeeksforGeeks' main page and help other Geeks.
Similar Reads
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 that does not include 1. Those numbers for which this process ends in 1 are Happy Numbers, while thos
14 min read
Program to print Happy Birthday
After a lot of programming algorithms, it's my turn to wish for a programmer friend. Send this code to your coder friend and give him/her a surprise on his/her birthday! CPP // CPP program to print Happy Birthday #include<bits/stdc++.h> using namespace std; int main() { // Print first row char
8 min read
Birthday Reminder Application in Python
This app helps in reminding birthdays and notifying your friend's birthdays. This app uses Python and Ubuntu notifications to notify users on every startup of the system. Python # Python program For # Birthday Reminder Application # time module is must as reminder # is set with the help of dates imp
2 min read
Email Account Merging
Given a 2D array arr[][], where each element arr[i] is an array of strings representing an account, where the first element arr[i][0] is a name, and the rest of the elements are emails associated with this name. Also, two accounts belong to the same person if there is a common email associated with
15+ min read
Email Etiquettes
Nowadays writing an email is a little difficult task for novice, so it is very important that whether for business or personal us what we should follow the basics of email etiquettes.Following lines enlist some important email etiquette that everyone needs to be aware of and follow :1. Be concise an
3 min read
Maximize the happiness of the groups on the Trip
A trip to mystical land is going to be organized in ByteLand, the city of Bytes. Unfortunately, there are limited seats say A and there are N number of groups of people. Every group can have old person o, child c, man m and woman w. The organizing committee wants to maximize the happiness value of t
15 min read
Project Idea | Help At Ease
Project Title: HelpAtEase Introduction: The project was developed to ease out the communication between individuals and non-profit organizations. The greatest problem one faces is the lack of information about the social events happening around. This project helped ease that problem and allowed NGOs
2 min read
Program to wish Women's Day
This article demonstrates the pattern to print the Venus Symbol (An international gender symbol for females). C++ // C++ code to wish happY Women's DaY #include <bits/stdc++.h> using namespace std; int main() { // Initializing size of // design int n = 5; // Loop to print Circle // (Upper part
7 min read
How to check horoscope using Python ?
In this article, we are going to see how to get a horoscope a day before, on that day as well as the day after using Beautifulsoup. Module needed:bs4: Beautiful Soup(bs4) is a Python library for pulling data out of HTML and XML files. This module does not come built-in with Python. To install this t
4 min read
Project Idea | Home Of Things
Project Title: Home of Things - An android app dedicated to the society.Introduction: An Android application which allows the user to read news regarding NGOs and also can donate and claim donated items. This app provides the following features:-Provides a news reading platform regarding NGOâs activ
2 min read