Упражнение "магическое число" на языке java


Таким образом, мое задание состоит в том, чтобы найти все "магические числа" в диапазоне чисел (вводимых пользователем). Магическое число - это число, множители которого (кроме него самого) суммируются с этим числом. Таким образом, 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 2

5 ответов:

Вы проверяете, является ли sumOfFactors == i, пока вы все еще суммируете факторы. Вам нужно переместить его за пределы цикла m. Затем вам нужно установить sumOfFactors в 0 перед началом цикла m каждый раз через цикл i, а не только один раз в начале цикла.

I я думаю, что вам нужно инициализировать 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);
     }
}

Попробуйте это:

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

            }
        }
    }

Просто ссылаясь на эту программу магических чисел 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;
     }
}
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);
        }
    }
}