【详解】使用java解决-打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙

举报
皮牙子抓饭 发表于 2026/01/07 22:20:39 2026/01/07
【摘要】 使用Java解决 - 打印出所有的水仙花数前言水仙花数(Narcissistic number)也被称为超完全数字不变数、自恋数、自幂数,是指一个 n 位数 (n≥3),它的每个位上的数字的 n 次幂之和等于它本身。对于三位数而言,如果一个三位数的各位数字的立方和等于这个数本身,那么这个数就是水仙花数。例如,153 是一个水仙花数,因为 \(1^3 + 5^3 + 3^3 = 153\)。本...

使用Java解决 - 打印出所有的水仙花数

前言

水仙花数(Narcissistic number)也被称为超完全数字不变数、自恋数、自幂数,是指一个 n 位数 (n≥3),它的每个位上的数字的 n 次幂之和等于它本身。对于三位数而言,如果一个三位数的各位数字的立方和等于这个数本身,那么这个数就是水仙花数。

例如,153 是一个水仙花数,因为 \(1^3 + 5^3 + 3^3 = 153\)。

本文将通过 Java 语言来实现一个简单的程序,用于找出并打印所有三位数中的水仙花数。

实现思路

  1. 确定范围:由于水仙花数是三位数,因此我们的查找范围是 100 到 999。
  2. 分解数字:对于每一个三位数,我们需要将其分解为百位、十位和个位。
  3. 计算立方和:计算这三个位置上数字的立方和。
  4. 比较结果:如果计算出的立方和等于原数,则该数为水仙花数。
  5. 输出结果:将找到的所有水仙花数打印出来。

Java代码实现

public class NarcissisticNumber {
    public static void main(String[] args) {
        // 遍历100到999之间的所有数字
        for (int num = 100; num <= 999; num++) {
            if (isNarcissistic(num)) {
                System.out.println(num);
            }
        }
    }

    /**
     * 判断一个数是否为水仙花数
     * @param num 待判断的数
     * @return 如果是水仙花数返回true,否则返回false
     */
    private static boolean isNarcissistic(int num) {
        int originalNum = num;
        int sum = 0;

        // 分解数字并计算立方和
        while (num > 0) {
            int digit = num % 10;
            sum += Math.pow(digit, 3);
            num /= 10;
        }

        // 判断立方和是否等于原数
        return sum == originalNum;
    }
}

运行结果

运行上述代码后,程序将输出所有的三位数水仙花数:

153
370
371
407


下面是一个用Java编写的示例代码,用于找出并打印所有的水仙花数(即三位数中,其各个位上的数字立方和等于该数本身的数)。

public class NarcissisticNumber {
    public static void main(String[] args) {
        // 遍历所有三位数,从100到999
        for (int number = 100; number <= 999; number++) {
            if (isNarcissistic(number)) {
                System.out.println(number);
            }
        }
    }

    /**
     * 判断一个数是否是水仙花数
     * @param number 要判断的数
     * @return 如果是水仙花数返回true,否则返回false
     */
    public static boolean isNarcissistic(int number) {
        int originalNumber = number;
        int sum = 0;

        // 提取每一位数字并计算立方和
        while (number > 0) {
            int digit = number % 10;
            sum += Math.pow(digit, 3);
            number /= 10;
        }

        // 判断立方和是否等于原数
        return sum == originalNumber;
    }
}

代码解释:

  1. 主方法 main​:
  • 使用一个 ​​for​​ 循环遍历从100到999的所有三位数。
  • 对于每个数,调用 ​​isNarcissistic​​ 方法判断它是否是水仙花数。
  • 如果是水仙花数,则打印该数。
  1. 辅助方法 isNarcissistic​:
  • 接受一个整数 ​​number​​ 作为参数。
  • 保存原始数 ​​originalNumber​​,以便后续比较。
  • 使用 ​​while​​ 循环提取每一位数字,并计算其立方和。
  • 最后,判断立方和是否等于原始数,如果是则返回 ​​true​​,否则返回 ​​false​​。

运行结果:

运行上述代码后,输出将是所有的水仙花数:

153
370
371
407

这些数都是三位数,并且它们各自的各位数字的立方和等于该数本身。希望这个示例对你有帮助!如果有任何问题或需要进一步的解释,请随时告诉我。当然可以!下面是一个详细的Java程序,用于找出并打印所有的水仙花数。

什么是水仙花数?

水仙花数(Narcissistic number)是指一个三位数,其各位数字的立方和等于该数本身。例如,153 是一个水仙花数,因为: \[ 153 = 1^3 + 5^3 + 3^3 \]

Java代码实现

public class NarcissisticNumber {
    public static void main(String[] args) {
        // 遍历所有三位数,从100到999
        for (int num = 100; num <= 999; num++) {
            if (isNarcissistic(num)) {
                System.out.println(num);
            }
        }
    }

    // 判断一个数是否是水仙花数
    public static boolean isNarcissistic(int num) {
        int originalNum = num;
        int sum = 0;

        // 提取每一位数字并计算立方和
        while (num > 0) {
            int digit = num % 10; // 取出个位数
            sum += Math.pow(digit, 3); // 计算立方并累加
            num /= 10; // 去掉个位数
        }

        // 判断立方和是否等于原数
        return sum == originalNum;
    }
}

代码解释

  1. 主方法 main​:
  • 使用一个 ​​for​​ 循环遍历所有三位数,从100到999。
  • 对于每一个数,调用 ​​isNarcissistic​​ 方法判断它是否是水仙花数。
  • 如果是水仙花数,则打印该数。
  1. 辅助方法 isNarcissistic​:
  • 接受一个整数 ​​num​​ 作为参数。
  • 将原数保存在 ​​originalNum​​ 中,以便后续比较。
  • 初始化 ​​sum​​ 为0,用于存储各位数字的立方和。
  • 使用 ​​while​​ 循环提取每一位数字:
  • ​digit = num % 10​​:取出当前数的个位数。
  • ​sum += Math.pow(digit, 3)​​:计算该位数字的立方并累加到 ​​sum​​。
  • ​num /= 10​​:去掉当前数的个位数。
  • 最后,判断 ​​sum​​ 是否等于 ​​originalNum​​,如果相等则返回 ​​true​​,否则返回 ​​false​​。

运行结果

运行上述程序,输出将是所有三位数中的水仙花数:

153
370
371
407

这些数都是满足条件的水仙花数。希望这个解释对你有帮助!如果有任何问题或需要进一步的说明,请随时告诉我。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。