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。但它没有显示任何错误,但程序从控制台中的用户获取数字后,我没有得到任何输出。
三个问题:
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");
}
}
}