java计算自幂数和水仙花数


在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`方法来计算数字的幂,并且为了获取数字的位数,它首先将数字转换为字符串,然后获取字符串的长度。这种方法虽然直观,但在处理非常大的数字时可能不是最高效的。然而,对于大多数常见情况,这种方法是足够的,并且代码简洁易读。