Java求四位数所有的水仙花数

什么是水仙花数?

水仙花数(Narcissistic Number),又称阿姆斯壮数,是指一个 n 位数,其各位数字的 n 次方和等于它本身。四位数的水仙花数则是四位数字的特殊情况。其中,四位数的每个数位的四次方和必须等于这个数本身。

例如,1634 是水仙花数,因为 ( 1^4 + 6^4 + 3^4 + 4^4 = 1634 )。

水仙花数程序实现

接下来,我们将使用 Java 编写一个程序来找出所有的四位水仙花数。程序思路如下:

  1. 使用循环遍历所有的四位数(1000到9999)。
  2. 对于每个数字,分离出其各个数字的位。
  3. 计算每个数字的四次方和。
  4. 检查该和是否与原数相等。

Java代码示例

public class NarcissisticNumbers {
    public static void main(String[] args) {
        System.out.println("四位水仙花数有:");
        for (int i = 1000; i < 10000; i++) {
            int sum = 0;
            int num = i;
            // 分离数字并计算四次方和
            while (num != 0) {
                int digit = num % 10;
                sum += Math.pow(digit, 4);
                num /= 10;
            }
            // 检查是否为水仙花数
            if (sum == i) {
                System.out.println(i);
            }
        }
    }
}

代码解析

  • for 循环遍历从 1000 到 9999 的所有数字。
  • while 循环用于将数字分离成单独的位数,并计算每位数的四次方。
  • 若四次方和等于原数,则输出该四位数。

序列图

以下是程序执行流程的序列图,展示了计算水仙花数的过程:

sequenceDiagram
    participant User
    participant Program
    User->>Program: 运行程序
    Program->>Program: 遍历从1000到9999的数字
    alt 水仙花数
        Program->>Program: 分离数字并计算和
        Program-->>User: 输出水仙花数
    else 非水仙花数
        Program->>Program: 继续遍历
    end

关系图

这是程序中涉及的关系图,展示了数字、算法与结果之间的关系:

erDiagram
    WATER_FLOW {
        int number
        int sum
    }
    ALGORITHM {
        string process
    }
    OUTPUT {
        int narcissistic_number
    }
    WATER_FLOW ||--o| ALGORITHM : generates
    ALGORITHM ||--o| OUTPUT : results in

结论

通过上述代码,我们不仅能得到所有的四位水仙花数,还能理解其背后的运算过程与逻辑结构。水仙花数是数字灵性的重要体现,编程不仅是解决问题的工具,也是对数学美的追求。通过不断实践,我们可以在计算中发现更多的乐趣以及普遍的规律。这就是探索数字世界的魅力所在。