Java 中判断一个数是否为自描述数


如果一个数字的第一个数字代表该数字中 0 的个数,第二个数字代表 1 的个数,第三个数字代表 2 的个数,以此类推,则称该数字为自描述数。

简单来说,如果给定数字的从左到右的数字分别代表该数字中 0、1、2、3、4……N 的出现频率,则该数字被称为自描述数。

自描述数的一些例子是:1210, 2020, 21200, 3211000, 42101000……等等。

以下是一些示例:

示例 1

Input number is 1210.
Let’s check it by using the logic of Autobiographical numbers.
Number of zeros available in the given number is = 1. And the first digit is also 1.
Number of one’s available in the given number is= 2. And the second digit is also 2.
Number of two available in the given number is= 1. And the third digit is also 1.
Number of three’s available in the given number is= 0. And the fourth digit is also 0.
As we notice here by arranging all those digits, we will get the same original number.
Hence, 1210 is an Autobiographical number.

示例 2

Input number is 12312.
Let’s check it by using the logic of Autobiographical numbers.
Number of zeros available in the given number is = 0, but the first digit is 1.
Hence, 12312 is not an Autobiographical number.

算法

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

步骤 2 - 将输入数字转换为字符串。

步骤 3 - 声明一个数组,然后将该字符串的数字存储到数组中。

步骤 4 - 然后启动循环并检查 0、1、2、3、4……n 的出现次数。

步骤 5 - 如果将数字的出现次数组合起来,得到的结果与原始数字相同,则打印给定数字是一个自描述数,否则不是。

语法

要在 Java 中获得任何数字的另一个数字次方的绝对值,我们有内置的 java.lang.Math.abs() 方法。

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

int value = Math.abs (inputValue)

多种方法

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

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

  • 使用用户输入值。

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

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

在这种方法中,我们声明一个变量并初始化一个数字作为值,并将此数字作为参数传递给用户自定义方法,然后在方法内部使用算法来检查该数字是否为自描述数。

示例

import java.util.*;
public class Main {
   public static void main(String args[]) {
      int inp= 3211000;
      if(checkAutobiographical(inp))
         System.out.println(inp + " is an autobiographical number.");
      else
         System.out.println(inp + " is not an autobiographical number.");
   }
   public static boolean checkAutobiographical(int n){
      int inputNumber = Math.abs(n);
      int temp = inputNumber;
      String s = String.valueOf(inputNumber);
      int arr[] = new int[s.length()];
      for(int i = arr.length - 1; i >= 0; i--) {
         arr[i] = temp % 10;
         temp = temp/10;
   }
   boolean f = true;
   for(int i = 0; i < arr.length; i++) {
      int count = 0;
      for(int j = 0; j < arr.length; j++) {
         if(i == arr[j])
         count++;
      }
      if(count != arr[i]) {
         f = false;
         break;
      } 
   }
   if(f)
      return true;
   else
      return false;
   }
}

输出

3211000 is an autobiographical number.

方法 2: 使用用户输入值

在这种方法中,我们通过用户输入声明一个输入数字,并使用算法来检查该数字是否为自描述数。

示例

import java.util.*;
public class Main {
   public static void main(String args[]) {
      Scanner sc=new Scanner(System.in);
      System.out.print("Enter the number: ");
      int inputNumber = sc.nextInt();
      inputNumber = Math.abs(inputNumber);
      int temp = inputNumber;
      String s = String.valueOf(inputNumber);
      int arr[] = new int[s.length()];
      for(int i = arr.length - 1; i >= 0; i--) {
         arr[i] = temp % 10;
         temp = temp/10;
      }
      boolean f = true;
      for(int i = 0; i < arr.length; i++) {
         int count = 0;
         for(int j = 0; j < arr.length; j++) {
            if(i == arr[j])
            count++;
         }
         if(count != arr[i]) {
            f = false;
            break;
         }
      }
      if(f)
         System.out.println(inputNumber + " is an autobiographical number.");
      else
         System.out.println(inputNumber + " is not an autobiographical number.");
   } 
} 

输出

Enter the number: 2020
2020 is an autobiographical number.

在本文中,我们探讨了如何使用不同的方法在 Java 中检查一个数字是否为自描述数。

更新于:2022-12-27

9K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始
广告