|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
关于求水仙花数的问题, 我用了新的思路写了一下, 代码出现了个细节问题, 我找不出来。 求大佬帮忙看看。
题目是这样子的。
0. 编写一个程序,求解 100~999 之间的所有水仙花数。
科普:
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
这次我用的思路是, 将循环中每一个数转化为字符串, 然后用 in 指令将字符串中每一个字符提取出来 转换成整型相加来判断是否是水仙花数。 具体代码如下:
for i in range(100, 1000):
i = str(i)
sum1 = 0
for each in i:
each = int(each)
sum1 += each ** 3
numb = i
numb = int(numb)
if sum1 == numb:
print(numb)
运算结果如下:
153
370
370
371
407
多了一个370 没搞懂问题出在哪里。 求大佬解答。
因为你把
numb = i
numb = int(numb)
if sum1 == numb:
print(numb)
这一块放在内层循环里面,每一次内层循环都会执行一遍,
前两位已经满足 sum1 == numb,而最后一个为0不影响 sum1 的值,所以就打印了两次
所以对结果的判断你应该放在内层循环的外面
故对你的代码修改如下:
- for i in range(100, 1000):
- i = str(i)
- sum1 = 0
- for each in i:
- each = int(each)
- sum1 += each ** 3
- numb = i # 这里开始不要缩进内层循环里面
- numb = int(numb)
- if sum1 == numb:
- print(numb)
复制代码
|
|