Open In App

Print all Strong numbers less than or equal to N

Improve
Improve
Like Article
Like
Save
Share
Report

Given a number N, print all the Strong Numbers less than or equal to N

Strong number is a special number whose sum of the factorial of digits is equal to the original number. 
For Example: 145 is strong number. Since, 1! + 4! + 5! = 145. 

Examples: 

Input: N = 100 
Output: 1 2 
Explanation: 
Only 1 and 2 are the strong numbers from 1 to 100 because 
1! = 1, and 
2! = 2

Input: N = 1000 
Output: 1 2 145 
Explanation: 
Only 1, 2 and 145 are the strong numbers from 1 to 1000 because 
1! = 1, 
2! = 2, and 
(1! + 4! + 5!) = 145 

Approach: The idea is to iterate from [1, N] and check if any number between the range is strong number or not. If yes then print the corresponding number, else check for the next number.

Below is the implementation of the above approach: 

C++




// C++ program for the above approach
#include<bits/stdc++.h>
using namespace std;
 
// Store the factorial of all the
// digits from [0, 9]
int factorial[] = { 1, 1, 2, 6, 24, 120,
                    720, 5040, 40320, 362880 };
 
// Function to return true
// if number is strong or not
bool isStrong(int N)
{
     
    // Converting N to String so that
    // can easily access all it's digit
    string num = to_string(N);
  
    // sum will store summation of
    // factorial of all digits
    // of a number N
    int sum = 0;
  
    for(int i = 0; i < num.length(); i++)
    {
        sum += factorial[num[i] - '0'];
    }
  
    // Returns true of N is strong number
    return sum == N;
}
  
// Function to print all
// strong number till N
void printStrongNumbers(int N)
{
     
    // Iterating from 1 to N
    for(int i = 1; i <= N; i++)
    {
         
        // Checking if a number is
        // strong then print it
        if (isStrong(i))
        {
            cout << i << " ";
        }
    }
}
 
// Driver Code
int main()
{
     
    // Given number
    int N = 1000;
     
    // Function call
    printStrongNumbers(N);
     
    return 0;
}
 
// This code is contributed by rutvik_56


Java




// Java program for the above approach
 
class GFG {
 
    // Store the factorial of all the
    // digits from [0, 9]
    static int[] factorial = { 1, 1, 2, 6, 24, 120,
                               720, 5040, 40320, 362880 };
 
    // Function to return true
    // if number is strong or not
    public static boolean isStrong(int N)
    {
 
        // Converting N to String so that
        // can easily access all it's digit
        String num = Integer.toString(N);
 
        // sum will store summation of
        // factorial of all digits
        // of a number N
        int sum = 0;
 
        for (int i = 0;
             i < num.length(); i++) {
            sum += factorial[Integer
                                 .parseInt(num
                                               .charAt(i)
                                           + "")];
        }
 
        // Returns true of N is strong number
        return sum == N;
    }
 
    // Function to print all
    // strong number till N
    public static void
    printStrongNumbers(int N)
    {
 
        // Iterating from 1 to N
        for (int i = 1; i <= N; i++) {
 
            // Checking if a number is
            // strong then print it
            if (isStrong(i)) {
                System.out.print(i + " ");
            }
        }
    }
 
    // Driver Code
    public static void
        main(String[] args)
            throws java.lang.Exception
    {
        // Given Number
        int N = 1000;
 
        // Function Call
        printStrongNumbers(N);
    }
}


Python3




# Python3 program for the
# above approach
 
# Store the factorial of
# all the digits from [0, 9]
factorial = [1, 1, 2, 6, 24, 120,
             720, 5040, 40320, 362880]
 
# Function to return true
# if number is strong or not
def isStrong(N):
 
    # Converting N to String
    # so that can easily access
    # all it's digit
    num = str(N)
  
    # sum will store summation
    # of factorial of all
    # digits of a number N
    sum = 0
  
    for i in range (len(num)):
        sum += factorial[ord(num[i]) -
                         ord('0')]
   
    # Returns true of N
    # is strong number
    if sum == N:
       return True
    else:
       return False
  
# Function to print all
# strong number till N
def printStrongNumbers(N):
     
    # Iterating from 1 to N
    for i in range (1, N + 1):
    
        # Checking if a number is
        # strong then print it
        if (isStrong(i)):
            print (i, end = " ")
 
# Driver Code
if __name__ == "__main__":
   
    # Given number
    N = 1000
  
    # Function call
    printStrongNumbers(N)
     
# This code is contributed by Chitranayal


C#




// C# program for the above approach
using System;
class GFG{
 
// Store the factorial of all the
// digits from [0, 9]
static int[] factorial = { 1, 1, 2, 6, 24, 120,
                         720, 5040, 40320, 362880 };
 
// Function to return true
// if number is strong or not
public static bool isStrong(int N)
{
 
    // Converting N to String so that
    // can easily access all it's digit
    String num = N.ToString();
 
    // sum will store summation of
    // factorial of all digits
    // of a number N
    int sum = 0;
 
    for (int i = 0; i < num.Length; i++)
    {
        sum += factorial[int.Parse(num[i] + "")];
    }
 
    // Returns true of N is strong number
    return sum == N;
}
 
// Function to print all
// strong number till N
public static void printStrongNumbers(int N)
{
 
    // Iterating from 1 to N
    for (int i = 1; i <= N; i++)
    {
 
        // Checking if a number is
        // strong then print it
        if (isStrong(i))
        {
            Console.Write(i + " ");
        }
    }
}
 
// Driver Code
public static void Main(String[] args)
{
    // Given Number
    int N = 1000;
 
    // Function Call
    printStrongNumbers(N);
}
}
 
// This code is contributed by sapnasingh4991


Javascript




<script>
 
// Javascript program for the above approach
 
// Store the factorial of all the
// digits from [0, 9]
let factorial = [ 1, 1, 2, 6, 24, 120,
                    720, 5040, 40320, 362880 ];
 
// Function to return true
// if number is strong or not
function isStrong(N)
{
     
    // Converting N to String so that
    // can easily access all it's digit
    let num = N.toString();
 
    // sum will store summation of
    // factorial of all digits
    // of a number N
    let sum = 0;
 
    for(let i = 0; i < num.length; i++)
    {
        sum += factorial[num[i] - '0'];
    }
 
    // Returns true of N is strong number
    return sum == N;
}
 
// Function to print all
// strong number till N
function printStrongNumbers(N)
{
     
    // Iterating from 1 to N
    for(let i = 1; i <= N; i++)
    {
         
        // Checking if a number is
        // strong then print it
        if (isStrong(i))
        {
            document.write(i + " ");
        }
    }
}
 
// Driver Code
     
    // Given number
    let N = 1000;
     
    // Function call
    printStrongNumbers(N);
 
// This code is contributed by Mayank Tyagi
     
</script>


Output: 

1 2 145

 

Time Complexity: O(N log10N)
Auxiliary Space: O(log10N)



Last Updated : 16 Oct, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads