马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼的def Narcissus():
for each in range(100, 1000):
temp = each
sum = 0
while temp:
sum = sum + (temp%10) ** 3
temp = temp // 10 # 注意这里用地板除
if sum == each:
print(each, end='\t')
print("所有的水仙花数分别是:", end='')
Narcissus()
不明白 sum = sum + (temp%10) ** 3
temp = temp // 10 # 注意这里用地板除
这里是怎么算的
我还是喜欢用? 转不过来弯了 求祝:#如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。
#例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
for i in range(100,1000):
a,b,c =tuple(str(i))
if int(a)**3+int(b)**3+int(c)**3==i:
print(i)
这里的难点在于%和//的用法。%为求模运算,相当于mod,也就是计算除法的余数,比如5%3就得到2,一个数对10求模的含义即获得该数的个位数。例如123%10的值为3;
//为整数除法,也就是计算除法的商,比如5//3就得到1,一个数对10整除的含义就是去除该数的各位数,例如123//10的值为12.
如果明白了上述运算符的用法。那么就好解释了。
sum是用来计算三位数的各位数字的立方和的。temp是用来获取三位数各个数字的;
sum首先给其赋初值为0,temp初值为一个三位数。第一次temp%10,相当于获得三位数的个位数;
temp//10相当于去除三位数的个位数,并将该值重新赋予temp;第二次循环,temp%10相当于获得十位数字,temp//10相当于把十位数也去掉,并重新赋予temp;第三次循环,temp%10相当于获得百位数,temp//10值为0,此时跳出循环,sum的值即为三位数各位数字的立方和。将其与each比较,如果成了,说明符合水仙花数的定义。
|