Упражнение "магическое число" на языке 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 ответов:
Вы проверяете, является ли
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); } } }