Program to check Strong Number

Strong Numbers are the numbers whose sum of factorial of digits is equal to the original number. Given a number, check if it is a Strong Number or not.

Examples:

Input  : n = 145
Output : Yes
Sum of digit factorials = 1! + 4! + 5!
                        = 1 + 24 + 120
                        = 145

Input :  n = 534
Output : No

1) Initialize sum of factorials as 0. 
2) For every digit d, do following
   a) Add d! to sum of factorials.
3) If sum factorials is same as given 
   number, return true.
4) Else return false.

An optimization is to precompute factorials of all numbers from 0 to 10.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if a number is
// strong or not.
#include <bits/stdc++.h>
using namespace std;
  
int f[10];
  
// Fills factorials of digits from 0 to 9.
void preCompute()
{
    f[0] = f[1] = 1;
    for (int i = 2; i<10; ++i)
        f[i] = f[i-1] * i;
}
  
// Returns true if x is Strong
bool isStrong(int x)
{
    int factSum = 0;
  
    // Traverse through all digits of x.
    int temp = x;
    while (temp)
    {
        factSum += f[temp%10];
        temp /= 10;
    }
  
    return (factSum == x);
}
  
// Driver code
int main()
{
    preCompute();
  
    int x = 145;
    isStrong(x) ? cout << "Yes\n" : cout << "No\n";
    x = 534;
    isStrong(x) ? cout << "Yes\n" : cout << "No\n";
    return 0;
}        

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check if
// a number is Strong or not
  
class CheckStrong
{
    static int f[] = new int[10];
   
    // Fills factorials of digits from 0 to 9.
    static void preCompute()
    {
        f[0] = f[1] = 1;
        for (int i = 2; i<10; ++i)
            f[i] = f[i-1] * i;
    }
      
    // Returns true if x is Strong
    static boolean isStrong(int x)
    {
        int factSum = 0;
       
        // Traverse through all digits of x.
        int temp = x;
        while (temp>0)
        {
            factSum += f[temp%10];
            temp /= 10;
        }
       
        return (factSum == x);
    }
      
    // main function 
    public static void main (String[] args) 
    {   
        // calling preCompute
        preCompute();
      
        // first pass
        int x = 145;
        if(isStrong(x))
        {
            System.out.println("Yes");
        }
        else
            System.out.println("No");
              
        // second pass
        x = 534;
        if(isStrong(x))
        {
            System.out.println("Yes");
        }
        else
            System.out.println("No");
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to check if a number is
# strong or not.
  
f = [None] * 10
  
# Fills factorials of digits from 0 to 9.
def preCompute() :
    f[0] = f[1] = 1;
    for i in range(2,10) :
        f[i] = f[i-1] * i
   
# Returns true if x is Strong
def isStrong(x) :
      
    factSum = 0
    # Traverse through all digits of x.
    temp = x
    while (temp) :
        factSum = factSum + f[temp % 10]
        temp = temp / 10
  
    return (factSum == x)
      
# Driver code
preCompute()
x = 145
if(isStrong(x) ) :
    print "Yes" 
else
    print "No"
x = 534
if(isStrong(x)) :
    print "Yes" 
else
    print "No"
  
# This code is contributed by Nikita Tiwari.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check if
// a number is Strong or not
using System;
  
class CheckStrong
{
    static int []f = new int[10];
  
    // Fills factorials of digits from 0 to 9.
    static void preCompute()
    {
        f[0] = f[1] = 1;
        for (int i = 2; i < 10; ++i)
            f[i] = f[i - 1] * i;
    }
      
    // Returns true if x is Strong
    static bool isStrong(int x)
    {
        int factSum = 0;
      
        // Traverse through all digits of x.
        int temp = x;
        while (temp > 0)
        {
            factSum += f[temp % 10];
            temp /= 10;
        }
      
        return (factSum == x);
    }
      
    // Driver Code 
    public static void Main () 
    
        // calling preCompute
        preCompute();
      
        // first pass
        int x = 145;
        if(isStrong(x))
        {
            Console.WriteLine("Yes");
        }
        else
            Console.WriteLine("No");
              
        // second pass
        x = 534;
        if(isStrong(x))
        {
            Console.WriteLine("Yes");
        }
        else
            Console.WriteLine("No");
    }
}
  
// This code is contributed by Nitin Mittal.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to check if a number 
// is strong or not. 
  
$f[10] = array(); 
  
// Fills factorials of digits 
// from 0 to 9. 
function preCompute() 
    global $f
    $f[0] = $f[1] = 1; 
    for ($i = 2; $i < 10; ++$i
        $f[$i] = $f[$i - 1] * $i
  
// Returns true if x is Strong 
function isStrong($x
    global $f
    $factSum = 0; 
  
    // Traverse through all digits of x. 
    $temp = $x
    while ($temp
    
        $factSum += $f[$temp % 10]; 
        $temp = (int)$temp / 10; 
    
  
    return ($factSum == $x); 
  
// Driver code 
preCompute(); 
$x = 145; 
  
if(isStrong(!$x))
    echo "Yes\n";
else
    echo "No\n"
$x = 534; 
if(isStrong($x))
    echo "Yes\n";
else
    echo "No\n"
      
// This code is contributed by jit_t
?>

chevron_right



Output:

Yes
No

This article is contributed by Pramod Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : nitin mittal, jit_t