#java #biginteger #perfect-numbers
#java #biginteger #perfect-numbers
Вопрос:
package perfect;
import java.math.BigInteger;
import java.util.Scanner;
public class Perfect {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter the number");
BigInteger n = input.nextBigInteger();
BigInteger sum = BigInteger.valueOf(0);
BigInteger i = BigInteger.valueOf(1);
BigInteger mul = BigInteger.valueOf(1);
for(; i.compareTo(n)< 0; i.add(BigInteger.ONE))
{
if(n.mod(i).equals(BigInteger.ZERO))
{
sum = sum.add(i);
mul = mul.multiply(i) ;
}
}
if(sum == n)
{
System.out.println(n "=" mul) ;
}
else
{
System.out.println("the given number " n " is not a perfect
number");
}
}
}
поскольку оно должно печатать 6 = 1*2*3 я использовал BigInteger. но оно не показывает никакой ошибки, но программа после ввода числа от пользователя в консоли не получает никаких выходных данных.
Комментарии:
1.
BigInteger
является неизменяемым —i.add(BigInteger.ONE)
возвращает новоеBigInteger
. Вы застряли в бесконечном цикле.2. Итак, как увеличить I в цикле
3. У вас уже есть
sum = sum.add(i);
, так что вы должны знать ответ…4. Вы не кодируете никаких выходных данных, так что заставляет вас думать, что вы можете ожидать этого?
Ответ №1:
Три проблемы:
BigInteger
является неизменяемым, поэтому вы должны сделатьi = i.add(BigInteger.ONE)
вместо- При сравнении
sum
сn
, вы должны сделатьsum.equals(n)
вместо - Сохраняйте коэффициенты в списке вместо кумулятивного умножения их обратно на входные данные
- Код будет выглядеть приятнее, если вы его отформатируете
import java.math.BigInteger;
import java.util.Scanner;
import java.util.ArrayList;
public class Perfect {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter the number");
BigInteger n = input.nextBigInteger();
BigInteger sum = BigInteger.valueOf(0);
BigInteger i = BigInteger.valueOf(1);
ArrayList<BigInteger> factors = new ArrayList<BigInteger>();
for (; i.compareTo(n) < 0; i = i.add(BigInteger.ONE)) {
if (n.mod(i).equals(BigInteger.ZERO)) {
sum = sum.add(i);
factors.add(i);
}
}
if (sum.equals(n)) {
System.out.print(n "=" factors.get(0));
for (int idx = 1; idx < factors.size(); idx ) {
System.out.print("*" factors.get(idx));
}
System.out.println();
} else {
System.out.println("the given number " n " is not a perfect number");
}
}
}
Комментарии:
1. Я запустил probem с вводом 6, но оно не печатается
6=1*2*3
. Оно просто печатает6=6
. Похоже, что заголовок и вопрос задают не это.2. Должно ли оно печатать 1*2*3
3. Или значение 1*2*3
4. @RudyVelthuis В исходном коде есть еще одна ошибка. Обновлено и исправлено сейчас.