鱼C论坛

 找回密码
 立即注册
查看: 1586|回复: 7

[已解决]009讲课后习题疑问

[复制链接]
发表于 2017-5-28 20:17:55 | 显示全部楼层 |阅读模式

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

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

x
编写程序,求100-999水仙花数。
水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)
  1. for i in range(100, 1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum = sum + (temp%10) ** 3
  6.         temp //= 10         # 注意这里要使用地板除哦~
  7.     if sum == i:
  8.         print(i)
复制代码


代码从这里就开始看不懂了,大神能详细说一下这几行代表了什么妈?
while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
最佳答案
2017-5-28 21:07:47
首先,说下%与//。
%是求余数的符号,比如a=temp%10,假设temp=105,a就等于5。temp%10即求出其个位数上的值,sum = sum + (temp%10) ** 3,就是求该数字各个位数上的值的立方之和。而//就是除号,不过这个除号的计算结果一定是整数。temp //= 10即在求得个位数上的和后将temp右移一个位数,就是除10。
然后,直到temp为0(即while temp)时,跳出循环。如果这个数每个位上的数字的 n 次幂之和(sum)等于该数(if sum == i:),则证明其是水仙花数并打印出来( print(i))。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-28 20:54:08 | 显示全部楼层
这个很简单,却一时说不清楚。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-28 21:07:47 | 显示全部楼层    本楼为最佳答案   
首先,说下%与//。
%是求余数的符号,比如a=temp%10,假设temp=105,a就等于5。temp%10即求出其个位数上的值,sum = sum + (temp%10) ** 3,就是求该数字各个位数上的值的立方之和。而//就是除号,不过这个除号的计算结果一定是整数。temp //= 10即在求得个位数上的和后将temp右移一个位数,就是除10。
然后,直到temp为0(即while temp)时,跳出循环。如果这个数每个位上的数字的 n 次幂之和(sum)等于该数(if sum == i:),则证明其是水仙花数并打印出来( print(i))。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-28 21:09:27 | 显示全部楼层
这样子明白了吗?如果明白了,请设为最佳答案,还有水仙花数的定义严格上是这么说的。水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-28 21:34:32 | 显示全部楼层
Messj 发表于 2017-5-28 21:07
首先,说下%与//。
%是求余数的符号,比如a=temp%10,假设temp=105,a就等于5。temp%10即求出其个位数上的值 ...

为什么说 sum= sum + (temp%10) ** 3,就是求该数字各个位数上的值的和呢
举个答案例子 i=153  倒推一下就是
sum=sum+3**3   sum=27
temp //=10     temp=15
循环一次  
sum=3**3+5**3
temp //=10  temp=1
在循环一次
sum=3**2+5**3+1**3=i
啊  竟然看懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-28 21:35:18 | 显示全部楼层
Messj 发表于 2017-5-28 21:07
首先,说下%与//。
%是求余数的符号,比如a=temp%10,假设temp=105,a就等于5。temp%10即求出其个位数上的值 ...

本来没看懂,举个例子来看试一下,竟然是出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-28 22:08:24 | 显示全部楼层
这个最好要自己多想想,这个是比较基础的。别人讲,记得不牢固
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-28 22:09:09 | 显示全部楼层
半音阶 发表于 2017-5-28 21:34
为什么说 sum= sum + (temp%10) ** 3,就是求该数字各个位数上的值的和呢
举个答案例子 i=153  倒推一下 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 04:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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