java中的for循环“幻数”练习
所以我的任务是找到一系列数字中的所有“幻数”(由用户输入)。幻数是指其因子(除自身外)总和等于该数的数。所以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);
}
}
}
}
}
# 1 楼答案
试试这个:
# 2 楼答案
# 3 楼答案
您正在测试是否
sumOfFactors == i
而您仍在对因子求和。您需要将其移到m
循环之外。然后,您需要在每次通过i
循环启动m
循环之前将sumOfFactors
设置为0,而不仅仅是在循环开始时设置一次# 4 楼答案
我认为您需要在第一个
for
循环中初始化int sumOfFactors = 0;
,并将第二个if
从第二个for
循环中移出,因为您需要将总因子之和与当前数进行比较,如下所示:# 5 楼答案
只是参考这个神奇的数字程序http://getprogramcode.com/2013/11/java-program-to-check-for-a-magic-number/并考虑写这个