打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。

本文介绍了一种通过编程找出所有三位数范围内水仙花数的方法。水仙花数定义为一个三位数,其各位数字立方和等于该数本身。文章提供了一个具体的Java实现示例,并展示了如何使用循环和条件判断来找出所有符合条件的水仙花数。

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

题目:
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析设计:
我们可以先建立一个for循环 因为水仙花数是三位数 所以我们的循环范围是[100,999] ,在循环中 将每个数进行分割 分割成个位 十位 百位 然后计算出【个位的三次方 + 十位的三次方 + 百位的三次方】 将计算结果和该数本身对比 如果相等 那么这个数就是水仙花数
代码:
import org.junit.Test;
public class NarcissusNumber {
	public void isNarcissusNumber() {
		//循环[100 , 999]
		for(int i = 100 ; i <= 999 ; i ++) {
			//分割出个位
			int a = i % 10;
			//分割出十位
			int b = i / 10 % 10;
			//分割出百位
			int c = i / 100;
			//判断该数是否等于【个位的三次方 + 十位的三次方 + 百位的三次方】
			if(i == (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3))) {
				System.out.println(i + "是水仙花数");
			}
		}
	}
	@Test
	public void test() {
		isNarcissusNumber();
	}
	/**
	 * 结果:
	 * --->153是水仙花数
	 * --->370是水仙花数
	 * --->371是水仙花数
	 * --->407是水仙花数
	 */
}


<think>首先,用户的问题是:打印所有的“水仙花”。水仙花一个三位数,其各位数字立方等于本身。我需要理解水仙花的定义:-它是一个三位数,所以范围从100到999。-对于一个,比如153,各位数字是1、5、3。-计算:1^3+5^3+3^3=1+125+27=153,所以它是水仙花。我的任务是编写代码来找所有的水仙花打印来。用户要求使用编程相关解决方案,所以我会提供代码并解释。既然用户提到了使用markdown格式包裹代码,我会在回答中使用代码块。代码语言应该是Python,因为它简单且用户没有定语言,但为了通用性,我可能用Python或Java等。参考之前的例子,用户使用了Python,所以我用Python。步骤:1.**迭代所有三位数**:从100到999。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)是一个三位数(范围 100 到 999),其各位数字立方等于本身。例如: - 153:1³ + 5³ + 3³ = 1 + 125 + 27 = 153 - 其他水仙花包括 370、371 407(仅有四个三位数水仙花)。 我将使用 Python 实现一个程序,迭代所有三位数(100–999),提取每个的百位、十位个位数字,计算它们的立方,并与原比较。如果相等,则打印。以下是完整的代码: ```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)`: 迭代所有三位数(100到999)。 - `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 是从 100 到 999 的数字量(900次迭代),空间复杂度为 O(1),因为不使用额外存储。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值