Java 中的阿姆斯特朗数

17 Mar 2025 | 5 分钟阅读

在本节中,我们将讨论什么是阿姆斯特朗数,并创建Java 程序来检查给定数字是否为阿姆斯特朗数阿姆斯特朗数程序在 Java 编码面试和学术界经常被问到。

阿姆斯特朗数

阿姆斯特朗数是一个正的 m 位数,它等于其各位数字的 m 次幂之和。它也被称为完全数超完全数水仙花数。它是 OEIS 序列 A005188。让我们通过一个例子来理解它。

阿姆斯特朗数示例

1: 11 = 1

2: 21 = 2

3: 31 = 3

153: 13 + 53 + 33 = 1 + 125+ 27 = 153

125: 13 + 23 + 53 = 1 + 8 + 125 = 134(不是阿姆斯特朗数)

1634: 14 + 64 + 34 + 44 = 1 + 1296 + 81 + 256 = 1643

同样,我们也可以检查其他数字。

0 到 999 之间的前几个阿姆斯特朗数是 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。 其他一些阿姆斯特朗数是 1634, 8208, 9474, 54748, 92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315, 24678050, 24678051, 88593477, 146511208, 472335975, 534494836, 912985153, 4679307774, 32164049650, 32164049651。

请注意,没有两位数的阿姆斯特朗数。

阿姆斯特朗数 Java 程序

以下 Java 程序打印所有小于或等于指定限制的阿姆斯特朗数。

ArmstrongNumberExample1.java

输出

Enter the limit: 999
Armstrong Number up to 999 are: 
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407

让我们创建另一个 Java 程序,检查给定数字是否为阿姆斯特朗数。

ArmstrongNumberExample2.java

输出 1

Enter the number: 2
Armstrong

输出 2

Enter the number: 1675
Not Armstrong

Java 阿姆斯特朗数 MCQ

1. 以下哪项正确定义了一个 n 位数的阿姆斯特朗数?

  1. 一个数,它等于其各位数字的 n 次幂之和。
  2. 一个数,它等于其各位数字的平方和。
  3. 一个数,它等于其各位数字的乘积。
  4. 一个数,它等于其各位数字的立方和。

答案:A)

解释: 阿姆斯特朗数定义为一个数,它等于其各位数字各自乘以数字位数的幂之和。


2. 为什么没有两位数的阿姆斯特朗数?

  1. 因为任何两位数的平方和永远不等于原数。
  2. 因为任何两位数的立方和永远不等于原数。
  3. 因为任何两位数的四次幂之和永远不等于原数。
  4. 因为任何两位数的 n 次幂之和(其中 n 为 2)永远不等于原数。

答案:D)

解释: 对于一个两位数来说,要成为阿姆斯特朗数,每个数字的平方和必须等于原数。任何两位数都不能满足这个条件。


3. 假设 n 是数字的位数,在提供的 Java 程序中,isArmstrong 函数的时间复杂度是多少?

  1. O(n)
  2. O(logn)
  3. O(nlogn)
  4. O(n2)

答案:A)

解释: 该函数在 O(logn) 中计算数字的位数,然后在另一个 O(logn) 中处理每个数字。因此,总时间复杂度为 O(n)。


4. 如果输入数字是 9474,isArmstrong 函数的输出是什么?

  1. True,因为 9474 是一个阿姆斯特朗数。
  2. False,因为 9474 不是一个阿姆斯特朗数。
  3. True,因为 9474 等于其各位数字的立方和。
  4. False,因为 9474 不等于其各位数字的四次幂之和。

答案:A)

解释: 9474 等于 94 + 44 + 74 + 44 = 6561 + 256 + 2401 + 256 = 9474


5. 关于 isArmstrong 函数的内存使用,以下哪项声明是正确的?

  1. 内存使用是常量 O(1)。
  2. 内存使用取决于输入数字的位数。
  3. 内存使用是对数 O(logn)。
  4. 内存使用是线性 O(n)。

答案:A)

解释: isArmstrong() 函数使用固定量的内存,无论输入大小如何,因此其内存使用是常量 O(1)。


下一个主题Java 程序