所以我的任务是找到一系列数字中的所有“幻数”(由用户输入)。幻数是一个数字,其因子(除了它自己)总和到那个数字。所以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);
}
}
}
}
}
答案 0 :(得分:2)
您正在测试sumOfFactors == i
当您还在汇总因素时。您需要将其移到m
循环之外。然后,您需要在每次通过sumOfFactors
循环开始m
循环之前将i
设置为0,而不是仅在循环开始时设置一次。
答案 1 :(得分:0)
试试这个:
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();
}
for (int i = 1 ; i <= range ; i++) {
int sumOfFactors = 0;
for (int m = 1 ; m < i; m++) {
if (i % m == 0) {
sumOfFactors = sumOfFactors + m;
}
}
if (sumOfFactors == i) {
System.out.println(i);
}
}
}
}
答案 2 :(得分:0)
我认为您需要在第一个int sumOfFactors = 0;
循环内初始化for
并从第二个if
循环中移出第二个for
,因为您需要比较总因数与当前数字的总和如下:
for (int i = 1 ; i <= range ; i++) {
int sumOfFactors = 0; //<--Moved inside
for (int m = 1 ; m < i; m++) {
if (i % m == 0) {
sumOfFactors = sumOfFactors + m;
}
}
if (sumOfFactors == i) { // <-- moveed out of second loop
System.out.println(i);
}
}
答案 3 :(得分:0)
只是提到这个魔术数字计划http://getprogramcode.com/2013/11/java-program-to-check-for-a-magic-number/并考虑写这个。
public class HelloWorld{
public static void main(String []args){
static int number=5432;
while(number>9){
int tot = calculateSum(number);
System.out.println(tot);
}
}
private static int calculateSum(int num){
int sum = 0;
while (num > 0) {
int a = num % 10;
sum = sum+ a;
num = num / 10;
}
number = sum;
return sum;
}
}
答案 4 :(得分:0)
public class Magic {
public static void main(String[] args) {
// TODO Auto-generated method stub
int b =778393;
int e=0,c;
while (b>=10) {
while (b>0) {
c=b%10;
b=b/10;
e=e+c;
}
b=e;
e=0;
System.out.println(b);
}
if (b==1) {
System.out.println("It is a magic no."+b);
} else {
System.out.println("Not"+b);
}
}
}