当前位置:首页 > 后端开发 > 正文

Java水仙花数代码如何写?

用Java编写水仙花数程序:遍历100-999,计算每位数字的立方和,若等于原数则输出,核心步骤包括数字拆分、幂运算和结果验证。

在Java中,水仙花数(Narcissistic Number)是指一个n位数,其各位数字的n次方之和等于该数本身,例如153 = 1³ + 5³ + 3³,以下是两种实现方法:

Java水仙花数代码如何写?  第1张

方法1:基础实现(仅三位数)

public class NarcissisticNumber {
    public static void main(String[] args) {
        System.out.println("三位数水仙花数:");
        for (int num = 100; num < 1000; num++) {
            int digit1 = num / 100;        // 百位
            int digit2 = (num % 100) / 10; // 十位
            int digit3 = num % 10;         // 个位
            // 计算立方和
            int sum = digit1*digit1*digit1 
                    + digit2*digit2*digit2 
                    + digit3*digit3*digit3;
            if (sum == num) {
                System.out.println(num);
            }
        }
    }
}

输出结果:
153
370
371
407

方法2:通用实现(任意位数)

public class NarcissisticNumber {
    public static void main(String[] args) {
        System.out.println("0-9999的水仙花数:");
        for (int num = 0; num <= 9999; num++) {
            String numStr = Integer.toString(num);
            int n = numStr.length();  // 位数
            int sum = 0;
            // 逐位计算n次方和
            for (int i = 0; i < n; i++) {
                int digit = numStr.charAt(i) - '0';
                sum += Math.pow(digit, n);
            }
            if (sum == num) {
                System.out.println(num);
            }
        }
    }
}

输出结果:
0
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474

关键说明:

  1. 基础方法:直接数学运算,仅适用于三位数,效率高。
  2. 通用方法
    • 通过字符串转换获取数字位数
    • 使用Math.pow()计算幂次
    • 支持任意位数(示例范围0-9999)
  3. 特殊说明
    • 0-9是1位数水仙花数(数学定义)
    • 1634是四位数水仙花数(1⁴+6⁴+3⁴+4⁴=1634)

优化建议:

  • 大范围计算时,可缓存幂次结果提升性能
  • 通过Scanner接收用户输入的自定义范围
  • 使用BigInteger处理超大型数字(10位以上)

引用说明:水仙花数定义参考数论基本概念,代码实现基于Java标准数学运算。

0