import java.util.Scanner;
public class GreatestCF {
public static void main(String []args){
Scanner sc = new Scanner(System.in);
checkAmicableNumbers(sc);
}
// 9
public static void checkAmicableNumbers(Scanner sc){
System.out.println("Enter the first number:");
int num1 = sc.nextInt();
System.out.println("Enter the second number:");
int num2 = sc.nextInt();
factorPairs2(num1);
factorPairs2(num2);
if (areAmicable(num1 ,num2)){
System.out.println("The numbers "+num1+ "and "+num2+" are amicable numbers!");
}else{
System.out.println("The numbers "+num1+ " and "+num2+" are not amicable numbers!");
}
}
public static boolean areAmicable(int num1, int num2){
return (sumOfProperDivisors(num1)==num2 && sumOfProperDivisors(num2)==num1);
}
public static int sumOfProperDivisors(int num){
int sum = 0;
for (int i=1; i<num/2;i++){
if (num % i==0){
sum +=i;
}
}
return sum;
}
public static void factorPairs2(int n){
System.out.print("The proper divisors of "+n+" are: {");
for (int i =1; i<= n/2; i++){
if (n % i==0 ){
System.out.print(i);
if (i != n/2){
System.out.print(", ");
}
}
}
System.out.print("}.\n");
}
}
我对正确除数的输出是在右花括号之前添加一个额外的逗号,并且我无法弄清楚如何修复它。我无法在代码中使用列表,因为它尚未在课堂上讨论过。
使用
sep
字符串。最初将其设置为 ""
并在数字之前打印它。然后,如果找到除数,请将其更改为 ", "
。在后续除数(如果有)上,它将在前一个数字“之后”打印逗号。
public static void factorPairs2(int n) {
String sep = "";
System.out.print("The proper divisors of "+n+" are: {");
for (int i = 1; i <= n / 2; i++) {
if (n % i == 0) {
System.out.print(sep);
System.out.print(i);
sep = ", ";
}
}
System.out.println("}.");
}