2014-10-17 113 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"); 
}