如何在Java中检查一个数是否为特殊数?
如果一个数的每一位数字的阶乘之和等于该数本身,则称该数为特殊数。
为了更清晰地说明,我们需要找到给定数字每一位数字的所有阶乘。然后,我们需要计算这些阶乘的总和。然后,我们将总和值与输入数字进行比较,如果它们相同,则给定数字是特殊数,否则不是。
在本文中,我们将学习如何使用Java编程语言来检查一个数是否为特殊数。
举几个例子
例子1
输入数字是145。
让我们使用特殊数的逻辑来检查它。
The factorial of 1, 4 and 5 is 1, 24 and 120. The sum of these factorials = 1 + 24 + 120 = 145
正如我们在这里看到的,阶乘之和与输入值相同。
因此,145是一个特殊数。
例子2
输入数字是534。
让我们使用特殊数的逻辑来检查它。
The factorial of 5, 3 and 4 is 120, 6 and 24. The sum of these factorials = 120 + 6 + 24 = 150
正如我们在这里看到的,阶乘之和与输入值不同。
因此,534不是特殊数。
算法
算法1
步骤1 − 通过初始化或用户输入获取一个整数。
步骤2 − 使用模运算符 (%) 一位一位地提取数字,同时使用while循环找到每个数字的阶乘,并跟踪阶乘的总和。
步骤3 − 最后将总和值与输入数字进行比较。
步骤4 − 如果总和值和输入值相等,则可以打印结果,表明给定数字是特殊数,否则不是特殊数。
算法2
步骤1 − 通过初始化或用户输入获取一个整数。
步骤2 − 然后创建一个数组,并保存各个索引位置的阶乘。(在索引 0 和索引 1 处保持值为 1),索引 2 将保存 2 的阶乘,索引 3 将保存 3 的阶乘……最后一个索引 9 将保存 9 的阶乘。
步骤3 − 使用模运算符 (%) 一位一位地提取数字,并根据数字从数组中找到其阶乘,并跟踪阶乘的总和。
步骤4 − 最后将总和值与输入数字进行比较。
步骤5 − 如果总和值和输入值相等,则可以打印结果,表明给定数字是特殊数,否则不是特殊数。
多种方法
我们提供了两种不同的方法。
使用静态输入值
使用用户定义的方法和数组
让我们逐一查看程序及其输出。
方法1:使用静态输入值
在这种方法中,将一个数字作为静态输入添加到程序中,然后使用算法 1,我们可以检查该数字是否为特殊数。
示例
import java.util.*; public class Main { //main method public static void main(String[] args) { //declare an int variable and initialize a number as value int inputNumber = 145; //declare a variable for iteration int i; //declare variables for factorial value and the extracted digits int factorial,digit; //declare a variable to store the sum value int sum = 0; //transfer the input value to a temporary variable int temp = inputNumber; //start looping for calculating the result while(temp != 0) { i = 1; factorial = 1; //extracting the digit digit = temp % 10; //get the factorial of the digit while(i <= digit) { factorial = factorial * i; i++; } //store the sum value sum = sum + factorial; //removing the digit one by one temp = temp / 10; } //check condition if(sum == inputNumber) //if sum value is equal to input number System.out.println(inputNumber + " is a special number\n"); else //if sum value is not equal to input number System.out.println(inputNumber + " is not a special number\n"); } }
输出
145 is a special number
方法2:使用用户定义的方法和数组
在这种方法中,将一个静态数字作为输入,并将此数字作为参数传递给用户定义的方法,然后在方法内部使用算法 2,我们可以检查该数字是否为特殊数。
示例
public class Main { //main method public static void main (String[] args) { //declare an int variable and initialize it with a number int inp = 2; //in if condition call the user defined function //by passing the input value to the method as parameter if(checkSpecial(inp)) { //if true then it is a special number System.out.println(inp + " is a special number."); } else { //if false then it is not a special number System.out.println(inp + " is not a special number."); } } //user defined method to check special number static boolean checkSpecial(int inputNumber) { //declare an array to store all the factorial value from 0 to 9 int factorial[] = new int[10]; //store 1 in 0th and 1st index of factorial //this is just to store each digits factorials at its respective index position //like the 1st index will hold factorial of 1, 2nd index for factorial of 2, 3rd index for factorial of 3... factorial[0] = factorial[1] = 1; //initiating the loop to find the factorials for (int i = 2; i<10; ++i) factorial[i] = factorial[i-1] * i; //declare an int variable 'sum' to store the sum value int sum = 0; //declare a temporary variable to store the input number int temp = inputNumber; //initiate the iteration for finding the sum of the factorials of the digits while (temp>0) { //get the factorial of the digit from the array sum += factorial[temp%10]; //removing the digit after calculation temp /= 10; } //if the sum value is equal to input number return true return (sum == inputNumber); } }
输出
2 is a special number.
在本文中,我们探讨了如何使用不同的方法在Java中检查一个数是否为特殊数。