鱼C论坛

 找回密码
 立即注册
查看: 379|回复: 5

[已解决]水仙花数

[复制链接]
发表于 2024-1-22 21:31:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如图,这个代码求水仙花数(如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。)
哪里错了,怎么改进呢
最佳答案
2024-1-23 09:40:48
本帖最后由 jackz007 于 2024-1-23 10:17 编辑
  1. for i in range(100 , 1000) :
  2.     sum = 0                                # 每个 i 都得初始化 sum 的值为 0,这是循环累加的必需步骤
  3.     for j in str(i) :
  4.         sum += int(j) * int(j) * int(j)
  5.     if sum == i :                          # 判断是否水仙花数得在内层循环结束后,也就是累加完之后
  6.         print(i)
复制代码

        不用借助字符串的版本
  1. for i in range(100 , 1000) :
  2.     sum , j = 0 , i
  3.     while j :
  4.         sum , j = sum + (j % 10) * (j % 10) * (j % 10) , j // 10
  5.     if sum == i :
  6.         print(i)
复制代码
QQ截图20240122212756.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-22 21:31:29 | 显示全部楼层
您的代码出现了两个问题:
1. 您的判断条件有问题,应该是判断各位数字的立方和是否等于原数,而不是三次方的和等于原数。
2. 您的输出语句位置有问题,应该在循环结束后输出结果。

下面是改进后的代码:

  1. for num in range(100, 1000):
  2.     # 获取百位、十位、个位的数字
  3.     hundreds = num // 100
  4.     tens = (num % 100) // 10
  5.     ones = num % 10
  6.    
  7.     # 判断水仙花数条件:各位数字的立方和等于原数
  8.     if num == hundreds ** 3 + tens ** 3 + ones ** 3:
  9.         print(num)
复制代码


这样就可以正确地找出范围内的水仙花数了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-22 21:55:45 | 显示全部楼层
这是对的(仅限思路)
问题在python中不存在^的运算,乘方用**就可以

点评

我很赞同!: 1.0 不,我坚决不同意楼主的看法!: 5.0
我很赞同!: 1 不,我坚决不同意楼主的看法!: 5
python是这样定义的,但在数学教科书上,有提到要使用^来表示乘方,标准计算机亦如此  发表于 2024-1-26 17:56

评分

参与人数 1贡献 +3 收起 理由
python爱好者. + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-23 08:42:43 | 显示全部楼层
我感觉你的这个sum,应该在找到一个水仙花数print(i)以后要置回0吧?不然在后面的遍历里,不就会一直累加上去?我没跑过程序,只是单纯看着。不知道对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-23 09:40:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-1-23 10:17 编辑
  1. for i in range(100 , 1000) :
  2.     sum = 0                                # 每个 i 都得初始化 sum 的值为 0,这是循环累加的必需步骤
  3.     for j in str(i) :
  4.         sum += int(j) * int(j) * int(j)
  5.     if sum == i :                          # 判断是否水仙花数得在内层循环结束后,也就是累加完之后
  6.         print(i)
复制代码

        不用借助字符串的版本
  1. for i in range(100 , 1000) :
  2.     sum , j = 0 , i
  3.     while j :
  4.         sum , j = sum + (j % 10) * (j % 10) * (j % 10) , j // 10
  5.     if sum == i :
  6.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 00:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表