|
发表于 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)
复制代码 |
|