2014-10-17 109 views
0

我在朋友的幫助下做了這個,以找到完美的數字(除數總和=原始數字的數字)總和達到用戶輸入的數字。有人可以幫我轉換它,這樣它就可以打印出每一個數字,即使它不是一個完美的數字,並且列出了所有的除數,那麼如果它是完美的,它會在除數後打印完美數字?所以就像「6:1,2,3,6,完美數字」而不使用數組?Java完美數字嵌套for循環

import java.util.*; 
public class PerfNumbers { 
public static void main(String[] args){  
    System.out.println("Enter A Number:");  
    Scanner sc = new Scanner(System.in);  
    int input = sc.nextInt();  
    int sumOfDivisors = 0; 

      for (int number = 1; number <= input; number++){  
       for (int divisor = 1; divisor < number; divisor++) 
       { 

        if (number % divisor == 0) 

         sumOfDivisors += divisor; 
        } 

         if (sumOfDivisors == number) 
         { 

        System.out.println(number); 
        } 

         sumOfDivisors = 0; 
      } 

    sc.close(); 
} 

} 

回答

1
import java.util.*; 

/** 
* 
* @author Tyler Weaver 
*/ 
public class Test { 

    public static void main(String[] args) { 
     System.out.print("Enter A Number: "); 
     Scanner sc = new Scanner(System.in); 
     int input = sc.nextInt(); 
     int sumOfDivisors = 0; 
     Collection<Integer> col = new ArrayList<>(); 

     for (int number = 1; number <= input; number++) { 
      for (int divisor = 1; divisor < number; divisor++) { 

       if (number % divisor == 0) { 
        sumOfDivisors += divisor; 
        col.add(divisor); 
       } 
      } 

      if (sumOfDivisors == number) { 

       System.out.printf("Perfect Number: %,d%n[", number); 
       for (Integer i : col) { 
        System.out.printf("%,d, ", i); 
       } 
       System.out.printf("\b\b]%n"); 
      } 

      sumOfDivisors = 0; 
      col.clear(); 
     } 

     sc.close(); 
    } 

} 

只是增加了一個集合來跟蹤除數,然後添加一個printf()語句以正確的格式。

編輯:代碼沒有使用集合。

import java.util.*; 

/** 
* 
* @author Tyler Weaver 
*/ 
public class Test { 

    public static void main(String[] args) { 
     System.out.print("Enter A Number: "); 
     Scanner sc = new Scanner(System.in); 
     int input = sc.nextInt(); 
     int sumOfDivisors = 0; 

     for (int number = 2; number <= input; number++) { 
      System.out.printf("Number: %,d%n[", number); 

      for (int divisor = 1; divisor < number; divisor++) { 

       if (number % divisor == 0) { 
        sumOfDivisors += divisor; 
        System.out.printf("%,d, ", divisor); 
       } 
      } 

      System.out.printf("\b\b]%n"); 

      if (sumOfDivisors == number) { 
       System.out.printf("Therefore %,d is a perfect number.%n%n", 
         number); 
      } else { 
       System.out.printf("%n"); 
      } 

      sumOfDivisors = 0; 
     } 

     sc.close(); 
    } 
} 
+0

這樣的作品,但你會如何得到它打印的所有數字的除數在完美的數字之間,即使他們不完美? – cooldudsk 2014-10-17 03:03:09

+0

在這種情況下,爲if(sumOfDivisors == number)語句創建一個'else'。在別的只是說一些像 ** System.out.printf(「非完美數字:%,d%n [」,數字); (Integer i:col){ System.out.printf(「%,d,」,i); } System.out.printf(「\ b \ b]%n」); ** – 2014-10-17 03:10:49

+0

他們應該真的爲註釋添加代碼格式。 >。< – 2014-10-17 03:12:28

0
public static void main(String[] args) 

{ 

    int i=6; 
    int n=i; 
    int r=0; 
    while(i>0){ 
    i--; 

if(i>0 && n%i==0){ 
    if (i!=0) 
     r=r+i; 
} 

    } 
    System.out.println(r); 
    if (r==n) 
     System.out.println("its True"); 
    else 
     System.out.println("its False"); 
}