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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵新瑜 中级黑马   /  2012-12-11 14:58  /  2629 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序目的:查找10000以内的完全数。(完全数:如果一个整数等于除它自身以外的所有除数之和,则这个数就是一个完全数)。例如:6=1+2+3,6就是一个完全数。28=1+2+4+7+14。28就是一个完全数。
希望能给出思路。

评分

参与人数 1黑马币 +9 收起 理由
崔政 + 9 有点意思

查看全部评分

2 个回复

正序浏览
这个可以实现楼主所要的功能:
  1. public class test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int num = 2;
  6.                 int sum = 0;
  7.                 //找出因数
  8.                 while(num<=10000)
  9.                 {
  10.                         for(int i =1;i<num;i++)
  11.                         {
  12.                                 if(num%i==0)
  13.                                 sum+=i;
  14.                         }
  15.                         if(num == sum)
  16.                         System.out.print(num+" ");
  17.                         num++;
  18.                         sum=0;
  19.                 }
  20.         }
  21. }
复制代码
输出结果是:6 28 496 8128


回复 使用道具 举报
本帖最后由 崔政 于 2012-12-11 15:31 编辑

自娱自乐了一个,方法很笨,凑合看吧
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class ArrayListTest {
  4.         public static void main(String[] args) {
  5.                 getNum(10000);
  6.         }
  7.        //获得num以内的完全数
  8.         public static void getNum(int num){
  9.                
  10.                 for(int i=1;i<num;i++){
  11.                         boolean result= isWholly(i);
  12.                         if(result)
  13.                                 System.out.println(i);
  14.                 }
  15.         }
  16.        //查看是否是完全数
  17.         public static boolean isWholly(int num){
  18.                 boolean result=false;
  19.                 List<Integer> list=new ArrayList<Integer>();
  20.                 for(int i=1;i<num;i++){
  21.                         if(num%i==0){
  22.                                 list.add(i);
  23.                         }
  24.                 }
  25.                 int sum=getSum(list);
  26.                 if(num==sum)
  27.                         result=true;
  28.                 return result;
  29.         }
  30.        //获得数组的和
  31.         public static int getSum(List<Integer> list){
  32.                 int sum=0;
  33.                 for(int i:list)
  34.                         sum=sum+i;
  35.                 return sum;
  36.         }
  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

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