How To Check Whether a Number is a Special Number or Not in Java?

A number is said to be a Special number, if the sum of factorials of the input number?s every digit is equal to the same input number.

For more clarification, we have to find all the factors of every digit of the given number. After that we have to calculate the sum of those factorials. Then we have to compare both the sum value and input number, if they are the same then the given number is a special number otherwise it is not a special number.

In this article, we will see how to check if a number is a special number by using Java programming language.

To show you some instances

Instance-1

Input number is 145.

Let?s check it by using the logic of the special number.

The factorial of 1, 4 and 5 is 1, 24 and 120.
The sum of these factorials = 1 + 24 + 120 = 145

As we notice here both the sum of the factorials and input value are same.

Hence, 145 is a special number.

Instance-2

Input number is 534.

Let?s check it by using the logic of the special number.

The factorial of 5, 3 and 4 is 120, 6 and 24.
The sum of these factorials = 120 + 6 + 24 = 150

As we noticed here both the sum of the factorials and input value are not same.

Hence, 534 is not a special number.

Algorithm

Algorithm-1

  • Step 1 ? Get an integer number either by initialization or by user input.

  • Step 2 ? Extract one by one digit by using modulo operator (%) and simultaneously find the factorial of each digit by using a while loop and keep track of the sum of factorials.

  • Step 3 ? Finally compare the sum value with the input number.

  • Step 4 ? If both the sum value and the input value are equal to each other then we can print the result as the given number is a special number otherwise the number is not a special number.

Algorithm-2

  • Step 1 ? Get an integer number either by initialization or by user input.

  • Step 2 ? Then take an array and keep the factorials of respective index positions. (At index?0 and index?1 keep value 1), index-2 will hold factorial of 2, index?3 will hold factorial of 3? and last index-9 will hold factorial of 9.

  • Step 3 ? Extract one by one digit by using modulo operator (%) and based on the digit find its factorial from the array and keep track of the sum of factorials.

  • Step 4 ? Finally compare the sum value with the input number.

  • Step 5 ? If both the sum value and the input value are equal to each other then we can print the result as the given number is a special number otherwise the number is not a special number.

Multiple Approaches

We have provided the solution in 2 different approaches.

  • By Using Static Input Value

  • By Using User Defined Method and Array

Let?s see the program along with its output one by one.

Approach-1: By Using Static Input Value

In this approach, take a number in the program as static input and then by using the Algorithm?1, we can check whether the number is a special number or not.

Example

<div class="execute"></div><div class="code-mirror  language-java" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">import</span> <span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token operator">*</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span>
   <span class="token comment">//main method</span>
   <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>

      <span class="token comment">//declare an int variable and initialize a number as value</span>
      <span class="token keyword">int</span> inputNumber <span class="token operator">=</span> <span class="token number">145</span><span class="token punctuation">;</span>

      <span class="token comment">//declare a variable for iteration</span>
      <span class="token keyword">int</span> i<span class="token punctuation">;</span>

      <span class="token comment">//declare variables for factorial value and the extracted digits</span>
      <span class="token keyword">int</span> factorial<span class="token punctuation">,</span>digit<span class="token punctuation">;</span>

      <span class="token comment">//declare a variable to store the sum value</span>
      <span class="token keyword">int</span> sum <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>

      <span class="token comment">//transfer the input value to a temporary variable</span>
      <span class="token keyword">int</span> temp <span class="token operator">=</span> inputNumber<span class="token punctuation">;</span>

      <span class="token comment">//start looping for calculating the result</span>
      <span class="token keyword">while</span><span class="token punctuation">(</span>temp <span class="token operator">!=</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
         i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
         factorial <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
         <span class="token comment">//extracting the digit</span>
         digit <span class="token operator">=</span> temp <span class="token operator">%</span> <span class="token number">10</span><span class="token punctuation">;</span>

         <span class="token comment">//get the factorial of the digit</span>
         <span class="token keyword">while</span><span class="token punctuation">(</span>i <span class="token operator"><=</span> digit<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            factorial <span class="token operator">=</span> factorial <span class="token operator">*</span> i<span class="token punctuation">;</span>
            i<span class="token operator">++</span><span class="token punctuation">;</span>
         <span class="token punctuation">}</span>

         <span class="token comment">//store the sum value</span>
         sum <span class="token operator">=</span> sum <span class="token operator">+</span> factorial<span class="token punctuation">;</span>

         <span class="token comment">//removing the digit one by one</span>
         temp <span class="token operator">=</span> temp <span class="token operator">/</span> <span class="token number">10</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>

      <span class="token comment">//check condition</span>
      <span class="token keyword">if</span><span class="token punctuation">(</span>sum <span class="token operator">==</span> inputNumber<span class="token punctuation">)</span>

         <span class="token comment">//if sum value is equal to input number</span>
         <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>inputNumber <span class="token operator">+</span> <span class="token string">" is a special number\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token keyword">else</span>
         <span class="token comment">//if sum value is not equal to input number</span>
         <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>inputNumber <span class="token operator">+</span> <span class="token string">" is not a special number\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>

<span class="token punctuation">}</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

145 is a special number

Approach-2: By Using User Defined Method and Array

In this approach, take a static number as input and pass this number as a parameter in a user defined method then inside the method by using the Algorithm?2 we can check whether the number is a special number or not.

Example

<div class="execute"></div><div class="code-mirror  language-java" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span>
   <span class="token comment">//main method</span>
   <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> main <span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>

      <span class="token comment">//declare an int variable and initialize it with a number</span>
      <span class="token keyword">int</span> inp <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span>

      <span class="token comment">//in if condition call the user defined function</span>
      <span class="token comment">//by passing the input value to the method as parameter</span>
      <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">checkSpecial</span><span class="token punctuation">(</span>inp<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>

         <span class="token comment">//if true then it is a special number</span>
         <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>inp <span class="token operator">+</span> <span class="token string">" is a special number."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
         <span class="token comment">//if false then it is not a special number</span>
         <span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>inp <span class="token operator">+</span> <span class="token string">" is not a special number."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>

   <span class="token punctuation">}</span>
   <span class="token comment">//user defined method to check special number</span>
   <span class="token keyword">static</span> <span class="token keyword">boolean</span> <span class="token function">checkSpecial</span><span class="token punctuation">(</span><span class="token keyword">int</span> inputNumber<span class="token punctuation">)</span> <span class="token punctuation">{</span>

      <span class="token comment">//declare an array to store all the factorial value from 0 to 9</span>
      <span class="token keyword">int</span> factorial<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token keyword">int</span><span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

      <span class="token comment">//store 1 in 0th and 1st index of factorial</span>
      <span class="token comment">//this is just to store each digits factorials at its respective index position</span>
      <span class="token comment">//like the 1st index will hold factorial of 1, 2nd index for factorial of 2, 3rd index for factorial of 3...</span>
      factorial<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> factorial<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>

      <span class="token comment">//initiating the loop to find the factorials</span>
      <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> i<span class="token operator"><</span><span class="token number">10</span><span class="token punctuation">;</span> <span class="token operator">++</span>i<span class="token punctuation">)</span>
      factorial<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> factorial<span class="token punctuation">[</span>i<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">*</span> i<span class="token punctuation">;</span>

      <span class="token comment">//declare an int variable 'sum' to store the sum value</span>
      <span class="token keyword">int</span> sum <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>

      <span class="token comment">//declare a temporary variable to store the input number</span>
      <span class="token keyword">int</span> temp <span class="token operator">=</span> inputNumber<span class="token punctuation">;</span>

      <span class="token comment">//initiate the iteration for finding the sum of the factorials of the digits</span>
      <span class="token keyword">while</span> <span class="token punctuation">(</span>temp<span class="token operator">></span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>

         <span class="token comment">//get the factorial of the digit from the array</span>
         sum <span class="token operator">+=</span> factorial<span class="token punctuation">[</span>temp<span class="token operator">%</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

         <span class="token comment">//removing the digit after calculation</span>
         temp <span class="token operator">/=</span> <span class="token number">10</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>

      <span class="token comment">//if the sum value is equal to input number return true</span>
      <span class="token keyword">return</span> <span class="token punctuation">(</span>sum <span class="token operator">==</span> inputNumber<span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

2 is a special number.

In this article, we explored how to check a number whether it is a special number or not in Java by using different approaches.

Updated on: 2022-11-17T11:31:24+05:30

7K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements