在Java中,自幂数(也称为自恋数、阿姆斯特朗数)和水仙花数(Narcissistic number)是相似的概念,但通常水仙花数特指三位数的自幂数。自幂数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。
以下是一个Java程序,用于计算并打印给定范围内的所有自幂数(包括水仙花数):
public class NarcissisticNumbers {
public static void main(String[] args) {
// 示例:计算1到10000之间的所有自幂数
for (int number = 1; number <= 10000; number++) {
if (isNarcissistic(number)) {
System.out.println(number);
}
}
}
/**
* 检查一个数是否是自幂数
* @param number 需要检查的数
* @return 如果是自幂数,则返回true;否则返回false
*/
public static boolean isNarcissistic(int number) {
int originalNumber = number;
int n = String.valueOf(number).length(); // 获取数字的位数
int sum = 0;
while (number > 0) {
int digit = number % 10; // 获取当前最低位
sum += Math.pow(digit, n); // 将当前位的n次幂累加到sum
number /= 10; // 移除当前最低位
}
return sum == originalNumber; // 检查累加和是否等于原数
}
}
这个程序首先定义了一个`isNarcissistic`方法,用于检查一个给定的数是否为自幂数。然后,在`main`方法中,它遍历了一个指定的范围(在这个例子中是1到10000),并使用`isNarcissistic`方法检查每个数是否为自幂数。如果是,则将其打印出来。
注意,这个程序使用了`Math.pow`方法来计算数字的幂,并且为了获取数字的位数,它首先将数字转换为字符串,然后获取字符串的长度。这种方法虽然直观,但在处理非常大的数字时可能不是最高效的。然而,对于大多数常见情况,这种方法是足够的,并且代码简洁易读。