编写一个静态方法
printNumbers
,该方法将整数max作为参数,并打印出所有小于或等于max的完美数字。
起初,我一直得到错误的答案,因为在我将内部循环设置为j< max之前,我将其设置为j< i。然而,我不明白为什么这个范围很重要,因为即使j的范围更大,i % j != 0
也不会吗?
for (int i = 1; i <= max; i++) {
int sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
if (sum == i) {
System.out.print(sum + " ");
}
}
如果我更改了内部循环j < max
,那么printNumbers(6)
会给出1和6,但printNumbers(500)
只会给出1,没有其他数字。
发布于 2019-06-06 07:35:45
如果您在内部循环中设置了j < max
,则当设置为j = i
时,i % j == 0
将返回true
并使您的结果倾斜。这是一个很好的例子,说明了在编码时需要注意的一个数学错误。
https://stackoverflow.com/questions/56469234
复制相似问题