java中的“Magic Number”练习

时间:2012-10-21 02:55:53

标签: java for-loop magic-numbers

所以我的任务是找到一系列数字中的所有“幻数”(由用户输入)。幻数是一个数字,其因子(除了它自己)总和到那个数字。所以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);
                    }
            }
        }
    }
}

5 个答案:

答案 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);
        }
    }
}