鱼C论坛

 找回密码
 立即注册
查看: 2402|回复: 4

[已解决]求助,求水仙花数这道题是什么意思

[复制链接]
发表于 2020-9-28 17:25:09 | 显示全部楼层 |阅读模式

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

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

x
编写一个程序,求 100~999 之间的所有水仙花数。
   如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。

for i in range(100, 1000):
        sum = 0
        temp = i
        while temp:
                sum = sum + (temp%10) ** 3
                temp //= 10         # 注意这里要使用地板除哦~
        if sum == i:
                print(i)


求助这里第二行第三行代表什么意思,以及 (temp%10) ** 3和temp //= 10 是什么意思
最佳答案
2020-9-28 17:30:59
%10是求个位数,**3是求个位数的三次方,//10是求temp的百位数和十位数,变成一个两位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-28 17:30:59 | 显示全部楼层    本楼为最佳答案   
%10是求个位数,**3是求个位数的三次方,//10是求temp的百位数和十位数,变成一个两位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-28 18:23:13 | 显示全部楼层
不知道你说的第二行和第三行不是指变量赋值的那两句,我还是说一下,sum = 0,temp=i,就是吧0赋给sum,把for循环100-1000的数依次赋给temp;至于后面的(temp%10)**3则表示 i 对10取余,并且求这个余数的三次方;temp//=10可以展开写成temp = temp//10,代表把temp对10取整除数,并且再赋值给temp。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-28 18:43:14 | 显示全部楼层
for i in range(100, 1000):
        sum = 0  # 所有位的三次方的和
        temp = i  
        while temp:  # 循环直至temp为零
                sum = sum + (temp%10) ** 3  # temp%10获得temp的个位数,此处sum加上个位的三次方
                temp //= 10         # temp地板除10,比如数字位321,此时就变为32,然后开始循环
                # 以321为例,分别进行了 sum = 0 + 1 ** 3 321//=10 变为32
                # sum = 1 + 2 ** 3  32//=10 变为3
                # sum = 9 + 3 ** 3  3//=10 变为0 跳出循环
                    
        if sum == i:  # 如果两者相等,则为水仙花数
                print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 13:21:48 | 显示全部楼层
如题 ,如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
那么,首先我们是不是要获取它的百十个位数分别对应的数字,好的,我们一个个来看。
153 // 10 地板除10是不是可以得到得到它的前面两位数,而% 10因为十位和百位上的数必定是10的倍数,也就是说一定会被整除,那么余下的就是个位数,没错吧。
那么到这里是不是就获取到了我们所需要的这3个数。然后就是每个数字的立方,再把3个立方相加得到立方和,你看是不是这么个逻辑。
代码在下面:
for i in range(100, 1000):
        sum = 0  # 所有位的三次方的和
        temp = i  
        while temp:  # 循环直至temp为零
                sum = sum + (temp%10) ** 3  # temp%10获得temp的个位数,此处sum加上个位的三次方
                temp //= 10         # temp地板除10,比如数字位321,此时就变为32,然后开始循环
                # 以321为例,分别进行了 sum = 0 + 1 ** 3 321//=10 变为32
                # sum = 1 + 2 ** 3  32//=10 变为3
                # sum = 9 + 3 ** 3  3//=10 变为0 跳出循环
                    
        if sum == i:  # 如果两者相等,则为水仙花数
                print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 23:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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