【发布时间】:2012-10-11 06:21:51
【问题描述】:
所以我的任务是找到一个数字范围内的所有“幻数”(由用户输入)。幻数是一个数,其因数(除了它自己)总和等于该数。所以 6 将是一个神奇的数字,因为它本身的因素是 1,2 和 3,总和为 6。我已经盯着这段代码一段时间了,我一生都无法弄清楚为什么它不会打印出来神奇的数字。任何帮助将不胜感激。
public class MagicNumber {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print("What is the top of the range?");
int range = IO.readInt();
if (range <= 0 ) {
IO.reportBadInput();
}
int sumOfFactors = 0;
for (int i = 1 ; i <= range ; i++) {
for (int m = 1 ; m < i; m++) {
if (i % m == 0) {
sumOfFactors = sumOfFactors + m;
}
if (sumOfFactors == i) {
System.out.println(i);
}
}
}
}
}
【问题讨论】:
-
别看它,调试它。要么通过调试器运行它,要么大量使用 println 语句来找出它的行为方式。
-
只是出于好奇,这个属性是不是通常所说的perfect numbers?例如,28 的质因数是 2(重数 2)和 7,但 28 的真因数是 1、2、4、7 和 14(总和为 28)。 28 是一个“神奇的数字”吗?
-
我可以看到的一件事是您没有将
sumOfFactors重置为零。 -
Tedd- 是的,这和完美数字是一回事。
标签: java for-loop magic-numbers