打印出所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。(Java经典编程案例)

本文介绍了一种使用Java编程语言查找所有三位数中满足特殊条件的数字——水仙花数的方法。水仙花数是一种特殊的三位数,其各位数字的立方和等于该数本身。通过两个不同的Java程序实现,展示了如何分解三位数并检查是否满足水仙花数的定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

程序分析:
利用for循环控制100-999的数,每个数分解出个位,十位,百位。

代码如下:

public class Demo2 {
    public static void main(String[] args) {
        //打印出所有的"水仙花数"
        //利用for循环控制100-999的数,每个数分解出个位,十位,百位。
        int i=100;                  //声明变量及赋初始值
        int x,y,z;

        while(i<=999){              //分别取出各个位上的数字

            x=i%10;                 //个位
            y=i/10%10;              //十位
            z=i/100;                //百位

            if(i==x*x*x+y*y*y+z*z*z){   //判断

                System.out.println(i);
            }
            i++;
        }
    }
}

//for循环
public class test {
    public static void main(String[] args) {
        int a,b,c;
        for(int i=100;i<=999;i++){
            a=i/100;
            b=i/10%10;
            c=i%10;
            if(i==a*a*a+b*b*b+c*c*c){
                System.out.println(i);
            }
        }
    }
}

代码执行结果如下:
在这里插入图片描述

<think>首先,用户的问题是:打印所有的“水仙花”。水仙花一个三位数,其各位数字立方等于本身。我需要理解水仙花的定义:-它是一个三位数,所以范围从100999-对于一个,比如153,各位数字是1、5、3。-计算:1^3+5^3+3^3=1+125+27=153,所以它是水仙花。我的任务是编写代码来找所有的水仙花打印来。用户要求使用编程相关解决方案,所以我会提供代码并解释。既然用户提到了使用markdown格式包裹代码,我会在回答中使用代码块。代码语言应该是Python,因为它简单且用户没有定语言,但为了通用性,我可能用Python或Java等。参考之前的例子,用户使用了Python,所以我用Python。步骤:1.**迭代所有三位数**:从100999。2.**提取各位数字**:对于一个num,提取百位、十位个位数字-百位数字:num//100-十位数字(num%100)//10或者num//10%10-个位数字:num%103.**计算立方**:百位^3+十位^3+个位^34.**比较**:如果立方等于num本身,则打印。现在,编写Python代码:```pythondefmain():print("所有的水仙花:")fornuminrange(100,1000):#提取各位数字digit_hundred=num//100#百位digit_ten=(num//10)%10#十位digit_one=num%10#个位#计算立方sum_of_cubes=digit_hundred**3+digit_ten**3+digit_one**3#比较并打印ifsum_of_cubes==num:print(num)if__name__=="__main__":main()```在代码中:-我定义了main函来组织代码。-使用range(100,1000)迭代所有三位数-提取数字:通过整除法取百位、十位个位。-计算立方:使用**3。-比较打印。我知道水仙花只有四个:153,370,371,407(我需要确保这是正确的。让我验证一下:-153:1^3+5^3+3^3=1+125+27=153→是-370:3^3+7^3+0^3=27+343+0=370→是-371:3^3+7^3+1^3=27+343+1=371→是-407:4^3+0^3+7^3=64+0+343=407→是是的,只有这四个。在代码中,它会打印这些数字。现在,按照用户要求,我需要提供:1.回答问题:我提供代码。2.给解释:解释代码做了什么。3.在最后面,提相关问题:用定的格式。格式:-首先,回答问题并给解释。-然后,在§§相关问题§§:后列问题,每个问题以1.2.3.等开始。用户给的例子是关于快排的,但我的是水仙花。所以,回答结构:-开头:描述问题解决方案。-提供代码:用markdown代码块。-解释代码:描述关键部分。-然后,提问题。相关问题:我应该提一些与水仙花或相关编程概念相关的问题。例如:1.如何优化这个代码?或并行计算?2.扩展到其他位的类似,如四位的阿姆斯特朗。3.在其他编程语言中的实现。4.理论问题,如证明只有这些。列4个问题:1.水仙花学证明或为什么只有四个?2.如何使用C++实现同样的程序?3.计算水仙花的时间复杂度是多少?4.扩展到位为n的类似,如何写一个通用函。确保问题相关。</think> ### 水仙花的解决方案 水仙花(Narcissistic number)是一个三位数(范围 100999),其各位数字立方等于本身。例如: - 153:1³ + 5³ + 3³ = 1 + 125 + 27 = 153 - 其他水仙花包括 370、371 407(仅有四个三位数水仙花)。 我将使用 Python 实现一个程序,迭代所有三位数100999),提取每个的百位、十位个位数字,计算它们的立方,并与原比较。如果相等,则打印。以下是完整的代码: ```python def main(): print("所有的水仙花:") for num in range(100, 1000): # 提取百位数字(通过整除法) digit_hundred = num // 100 # 提取十位数字:先除以10取整部分,再取余10 digit_ten = (num // 10) % 10 # 提取个位数字(通过取余10) digit_one = num % 10 # 计算各位数字立方 sum_of_cubes = digit_hundred**3 + digit_ten**3 + digit_one**3 # 比较立方与原,如果相等则打印 if sum_of_cubes == num: print(num) if __name__ == "__main__": main() ``` #### 代码解释: 1. **函定义**:`main()` 函封装了核心逻辑。 - `for num in range(100, 1000)`: 迭代所有三位数100999)。 - `digit_hundred = num // 100`: 通过整除法获取百位数字(如 153 // 100 = 1)。 - `digit_ten = (num // 10) % 10`: 先除以10取整部分(153 // 10 = 15),再取余10得到十位(15 % 10 = 5)。 - `digit_one = num % 10`: 直接取余10获取个位数字(153 % 10 = 3)。 2. **立方计算**:`sum_of_cubes = digit_hundred**3 + digit_ten**3 + digit_one**3` 使用运算符 `**` 计算每位数字立方。 3. **比较**:`if sum_of_cubes == num:` 检查是否为水仙花,如果是则打印。 4. **执行入口**:`if __name__ == "__main__":` 确保直接运行脚本时执行 `main()`。 此程序运行后会输所有三位水仙花:153、370、371 407。时间复杂度为 O(n),其中 n 是从 100999数字量(900次迭代),空间复杂度为 O(1),因为不使用额外存储。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值