如何在Java中检查一个数是否为水仙花数?


如果一个数的每个位数的n次幂之和等于该数本身,则称该数为水仙花数,其中n是该数的位数。

更清晰地说,如果一个数有n位,我们首先计算每个位数的n次幂。然后将这些值相加,如果计算出的值与原数相同,则该原数被称为水仙花数。

一些水仙花数的例子是:153, 8208, 4210818, ... 等。

在这篇文章中,我们将学习如何使用Java编程语言来检查一个数是否为水仙花数。

举几个例子

实例1

输入数字是153。

让我们用水仙花数的逻辑来检查它。

153的位数是3。

计算幂值并相加 = (1^3) + (5^3) + (3^3) = 1 + 125 + 27 = 153

我们在这里注意到计算出的数字和原数字相同。

因此,153是一个水仙花数。

实例2

输入数字是8208。

让我们用水仙花数的逻辑来检查它。

8208的位数是4。

计算幂值并相加 = (8^4) + (2^4) + (0^4) + (8^4) = 4096 + 16 + 0 + 4096 = 8208

我们在这里注意到计算出的数字和原数字相同。

因此,8208是一个水仙花数。

实例3

输入数字是250。

让我们用水仙花数的逻辑来检查它。

250的位数是3。

计算幂值并相加 = (2^3) + (5^3) + (0^3) = 8 + 125 + 0 = 133。

我们在这里注意到计算出的数字和原数字不同。

因此,250不是一个水仙花数。

算法

步骤1 - 通过静态输入方法获取输入数字。

步骤2 - 计算原数字的位数。

步骤3 - 初始化一个循环来提取数字并计算它的幂值。在循环中,将这些计算出的幂值相加并存储到一个变量中。

步骤4 - 将计算出的值与原数字进行比较。

步骤5 - 如果两者相同,则输入数字被称为水仙花数,否则不是。

语法

在Java中,我们可以使用内置的java.lang.Math.pow()方法来获取任何数的另一个数的幂。

以下是使用该方法获取2的幂的语法:

double power = Math.pow (inputValue,2)

多种方法

我们提供了多种方法的解决方案。

  • 使用静态输入值和用户自定义方法

  • 使用用户输入和用户自定义方法

让我们逐一查看程序及其输出。

方法1:使用静态输入值

在这种方法中,我们声明一个变量并用一个数字初始化它。通过将此数字作为参数调用用户自定义方法。然后,在方法内部,我们可以使用算法来检查该数字是否为水仙花数。

示例

import java.util.*; 
import static java.lang.Math.*;
public class Main {
   public static void main(String args[]) {

      //declare a variable and initialize it with a number
      int inputNumber = 8208;
      
      //call the function inside the if condition which checks narcissistic
      if (checkNarcissistic(inputNumber))
         System.out.println(inputNumber + " is a narcissistic number.");
      else
         System.out.println(inputNumber + " is not a narcissistic number.");
   }
   
   //user-defined method to count the digits
   static int countDig(int num) {
      if (num == 0)
         return 0;
         return 1 + countDig(num / 10);
   }
   
   //user-defined method to check narcissistic number
   static boolean checkNarcissistic(int num) {
      
      //declare a variable and store the counts of digits
      int p = countDig(num);
      
      //declare a variable and temporary store the input number
      int temp = num;
      
      //Declare a variable which store the sum value and initiate it with 0
      int sum = 0;
      
      //execute the loop
      while(temp > 0) {
         
         //extarct digits and find power of it
         
         //continuously add it to sum value
         sum+= pow(temp % 10, p);
         
         //removes the digit which is already calculated
         temp = temp / 10;
      }
      
      //return true if original number is equal to the sum value
      return (num == sum);
   }
}

输出

8208 is a narcissistic number.

方法2:使用静态输入值

在这种方法中,我们声明一个变量,并通过用户输入为其赋值。通过将此数字作为参数调用用户自定义方法。然后,在方法内部,我们可以使用算法来检查该数字是否为水仙花数。

示例

import java.util.*;
import static java.lang.Math.*;
public class Main {
   public static void main(String args[]) {
      
      //create object of Scanner class
      Scanner sc = new Scanner(System.in);
      
      //ask the user to enter a number
      System.out.print("Enter the number: ");
      
      //declare a variable and store the input value
      int inputNumber = sc.nextInt();
      
      //call the function inside the if condition which checks narcissistic
      if (checkNarcissistic(inputNumber))
         System.out.println(inputNumber + " is a narcissistic number.");
      else
         System.out.println(inputNumber + " is not a narcissistic number.");
   }
   
   //user-defined method to count the digits
   static int countDig(int num) {
      if (num == 0)
         return 0;
         return 1 + countDig(num / 10);
   }
   
   //user-defined method to check narcissistic number
   static boolean checkNarcissistic(int num) {
      
      //declare a variable and store the counts of digits
      int p = countDig(num);
      
      //declare a variable and temporary store the input number
      int temp = num;
      
      //Declare a variable which store the sum value and initiate it with 0
      int sum = 0;
      
      //execute the loop
      while(temp > 0) {
         
         //extarct digits and find power of it
         
         //continuously add it to sum value
         sum+= pow(temp % 10, p);
         
         //removes the digit which is already calculated
         temp = temp / 10;
      }
      
      //return true if original number is equal to the sum value
      return (num == sum);
   }
} 

输出

Enter the number: 8208
8208 is a narcissistic number.

在这篇文章中,我们探讨了如何使用不同的方法在Java中检查一个数是否为水仙花数。

更新于:2022年12月9日

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告