黑马程序员技术交流社区

标题: 编写程序,找出这4个完全数 [打印本页]

作者: HM张博文    时间: 2013-5-27 21:54
标题: 编写程序,找出这4个完全数
本帖最后由 HM张博文 于 2013-5-28 09:28 编辑

如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数。例如:6是第一个完全数,因为6=1+2+3.下一个完全数是28=14+7+4+2+1。10000以下的完全数总共也只有4个,请编写程序,找出这4个完全数并打印出来。
作者: lpflpy    时间: 2013-5-27 22:08
  1. package heimeTest;
  2. public class Test4{
  3.         public static void main(String[] args) {
  4.                 getCompleteNumber();//6,28,496,8128
  5.         }
  6.         public static void getCompleteNumber(){
  7.                 for(int i = 1;i<=10000;i++){
  8.                         int sum = 0;
  9.                         for(int j = 1;j<i;j++){
  10.                                 if(i%j==0){
  11.                                         sum+=j;
  12.                                 }
  13.                         }
  14.                         if(sum == i){
  15.                                 System.out.println(i);
  16.                         }
  17.                 }
  18.         }
  19. }
复制代码

作者: 棉/mg花/x糖    时间: 2013-5-27 22:28
本帖最后由 棉/mg花/x糖 于 2013-5-27 22:34 编辑

正好前两天写过这样一个程序,哈哈,看下面代码,希望能帮到你^_^
  1. package com.yb.FindPerfectNumber;

  2. public class FindPerfectNumber {
  3.     public static void main(String []args) {
  4.         int i,j,s,n = 0;
  5.         for(i = 1; i <= 1000; i++) {
  6.             s = 0;
  7.             for(j = 1; j < i; j++) {
  8.                 if(i%j == 0) s += j;
  9.             }
  10.             if(s == i) {
  11.                 System.out.print(i+" = ");
  12.                 for(j = 1; j < i/2; j++)
  13.                     System.out.print(i%j==0 ? j+"+":"");
  14.                 System.out.println(i/2);                 //输出最后一个因子
  15.                 n++;
  16.             }
  17.         }
  18.         System.out.println("\n1000之内的完全数共有 "+n+" 个!");
  19.     }
  20. }
复制代码
运行效果截图:


作者: 风爽    时间: 2013-5-27 22:42
  1. public class Demo {
  2.         public static  void main(String[] args)
  3.         {
  4.                 for(int i = 1; i <=1000; i++)
  5.                 {
  6.                         int sum = 0;
  7.                         for(int j = 1; j < i - 1; j++)
  8.                         {
  9.                                 if(i % j == 0)
  10.                                 {
  11.                                         sum = sum + j;
  12.                                 }
  13.                         }
  14.                         if(sum == i)
  15.                                 System.out.println(sum);
  16.                 }
  17.         }
  18. }
复制代码
运行结果只有三个:6,28,496
作者: 棉/mg花/x糖    时间: 2013-5-27 23:20
本帖最后由 棉/mg花/x糖 于 2013-5-27 23:25 编辑

程序改进,源码如下:
  1. package com.yb.FindPerfectNumber;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. public class FindPerfectNumber {
  6.     static void findPerfectNum(int n) {
  7.         int i,j,s,k = 0;
  8.         for(i = 1; i <= n; i++) {
  9.             s = 0;
  10.             for(j = 1; j < i; j++) {
  11.                 if(i%j == 0) s += j;
  12.             }
  13.             if(s == i) {
  14.                 System.out.print(i+" = ");
  15.                 for(j = 1; j < i/2; j++)
  16.                     System.out.print(i%j==0 ? j+"+":"");
  17.                 System.out.println(i/2);         //输出最后一个因子
  18.                 k++;
  19.             }
  20.         }
  21.         System.out.println("\n"+n+"之内的完全数共有 "+k+" 个!");
  22.     }

  23.     public static void main(String []args) throws IOException {
  24.         System.out.println("请从键盘输入一个整数n(n<2147000000):");
  25.         BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
  26.         String ch = keyin.readLine();
  27.         int n = Integer.parseInt(ch);
  28.         System.out.println("\n要寻找 "+n+"以内的完全数:\n");
  29.         findPerfectNum(n);
  30.     }
  31. }
复制代码
运行效果截图:


作者: 张俊迪    时间: 2013-5-28 02:29

public class Test3 {
        public static void main(String[] args){
                int sum;//除数的和
                String str;//是为了输出有那几个数整除的数;
                for(int i=3;i<10000;i++){//很容易就能判断出1,2,3不是完全数,所以可以直接从3开始
                        sum=0;
                        str="=1";//每次进入时重新复制
                        int k=i/2+1;//因为一个除数最大也就是被除数的1/2所以此处可以除以2+1来优化程序,减少执行时间,提高效率
                        for(int j=1;j<=k;j++){
                                if(i%j==0){
                                    sum+=j;
                                    if(j!=1)//这地方需要过滤掉1
                                            str+="+"+j;
                                }
                        }
                        if(sum==i){
                                System.out.println(sum+str);
                        }
                }
        }

}

image.jpg (31.15 KB, 下载次数: 0)

image.jpg

作者: 袁梦希    时间: 2013-5-28 16:05
非常好  同学
作者: 风爽    时间: 2013-5-28 18:21
风爽 发表于 2013-5-27 22:42
运行结果只有三个:6,28,496

没看清题,我写的是1000以内的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2