A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 廉伟 中级黑马   /  2012-10-2 13:47  /  2298 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
解答:
根据题目意思,设计程序如下:
import java.io.*;
import java.util.*;
public class Text9 {
        public static void fenJie(Vector<Integer> m,int n)
        {
                for(int i=1;i<=n/2;i++)
                        if(n%i==0)
                                m.addElement(i);               
        }
        public static boolean panBie(Vector<Integer> m,int n)
        {
                int sum=0;
                for(int i=0;i<m.size();i++)
                        sum=sum+m.elementAt(i);
                if(sum==n)
                        return true;
                else
                        return false;
               
        }
        public static void main(String[] args) throws IOException
        {
                boolean zhenjia=false;               
                System.out.println("1000以内的完数为:");
                for(int i=2;i<1000;i++)
                {
                        Vector<Integer> pool=new Vector<Integer>();
                        fenJie(pool,i);
                        zhenjia=panBie(pool,i);
                        if(zhenjia)
                                System.out.println(i);
                }               
        }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览

回帖奖励 +10

我下面的解法比你那个简单很多:
public class WanShu{
      public static void main(String args[]){
          int n=6,z=0,k,sum=0,i=0,j=0;
          Integer zi[]=new Integer[100];
          for(n=1;n<=1000;n++){
              k=1;
              sum=0;
              while(k<n)
              {
                  z=k++;               
                  if ((n%z)==0){
                      sum+=z;
                      zi[i++]=z;
                      j=i;                    
                  }                    
              }
              if (sum==n) {
                  System.out.print(n+" its factors are :");
                  for(i=0;i<j;i++)
                      System.out.print(zi[i]+",");
                  System.out.println() ;
              }
              i=0 ;
          }
      }
}

希望对你有所帮助,学习愉快!谢谢!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报

回帖奖励 +10

  1. package cn.itcast.heima.technology;

  2. public class PerfectNumber {
  3. /*
  4. 循环嵌套思想
  5. 1,遍历所有的数
  6. 2,找到遍历到的数的因子
  7. 3,求和判断

  8. */        public static void main(String[] args) {
  9.                 //判断1~1000之间的完数,循环遍历1到1000之间的数
  10.                 StringBuilder sb=new StringBuilder();
  11.                
  12.                 for(int a=2;a<=1000;a++){
  13.                         int[]arr=new int[a>>>1];//完数因子不会超过本身的一半
  14.                         int pos=0;
  15.                         for(int b=1;b<a;b++)
  16.                         {
  17.                                 if(a%b==0){
  18.                                         arr[pos++]=b;//将遍历到的数的因子添加进数组
  19.                                 }
  20.                         }
  21.                         int temp=0;
  22.                         for(int x:arr){//求数组的和
  23.                                 temp+=x;
  24.                         }
  25.                         if(temp==a)//判断因子的和是否与遍历的数相等,
  26.                                 sb.append(+a+",");
  27.                 }
  28.                 System.out.println(sb.toString());
  29.         }
  30.        
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 柏占肖 于 2012-10-3 19:35 编辑
  1. public class WanShu {

  2.         public static void main(String[] args) {
  3.                 getWanShu(1, 1000);
  4.         }

  5.         public static void getWanShu(int star, int end) {
  6.                 int sum = 1;
  7.                 while (star <= end) {
  8.                         for (int i = 2; i < Math.sqrt(star); i++) {
  9.                                 if (0 == star % i) {
  10.                                         sum += i+ star / i;
  11.                                 }
  12.                         }
  13.                         if ((int) Math.sqrt(star) == Math.sqrt(star)) {
  14.                                 sum += Math.sqrt(star);
  15.                         }
  16.                         if (sum == star) {
  17.                                 System.out.println(star);
  18.                         }
  19.                         sum = 1;
  20.                         star++;
  21.                 }
  22.         }
  23. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马