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

本文提供两种使用C语言实现水仙花数的方法。第一种通过遍历100到999之间的所有整数并检查每个数字是否等于其各位数字立方和的方式找出水仙花数;第二种方法通过固定每个位上的数字并计算总和来查找水仙花数。

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

代码如下:

#include<stdio.h>
int main (void)
{
	int i,j,k,n;
	printf("water flower' number is:");
	for(n=100;n<1000;n++)
	{
		i=n/100;
		j=n/10%10;
		k=n%10;
		if(n==i*i*i+j*j*j+k*k*k)
		{
			printf("%-5d",n);
		}
	}
	return 0;
}
//还有一种方法
/*
#include <stdio.h>
int main (void)
{
	int a,b,c,sum;
	for(a=1;a<=9;a++)
	{
		for(b=0;b<=9;b++)
		{
			for(c=0;c<=9;c++)
			{
				sum=a*100+b*10+c;
				if(sum==a*a*a+b*b*b+c*c*c)
				{
					printf("%d        ",sum);
				}
			}
		}
	}
	
	return 0;
}*/


<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),因为不使用额外存储。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值