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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Sheng.cn 于 2015-4-30 22:15 编辑

刚看到这题的时候有了思路,想了一个较为麻烦的做法,不过能做出来;由于当时没审好题所以没出来结果,刚才一看题恍然大悟,两种方法如下:
        题目  :::  一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3。找出10000以内的所有完数.。


方法一: 最初的想法
/*
思路:           1;查找范围为1~10000  用for循环
                     2; 需要求出每一个数的所有因子
           3; 找出符合因子之和等于这个数的数
*/
class WanShu
{
        public static void main(String[] args)
        {
                for (int x =1;x<=10000 ;x++ )
                {
                        int [] arr= new int[10000];      //数组的长度为一万,肯定够用 ,存放因子数
                        int pos = 0;             //表示数组的 角标 ,将来从第一个角标位开始存放

                                 for (int yin = 1;yin < x ;yin++ )
                                 {
                                        if (x%yin==0)     //求x 的所有因子
                                        {                                                
                                                arr[pos++]=yin;
                                        }
                                 }
                                 
                                int sum=0;
                                for (int a=0;a<arr.length ;a++ )
                                {
                                        sum+=arr[a];  //计算因子的和
                                }
                                if (sum==x)     //判断是否为完数
                                {
                                        System.out.println(x);
                                }
                }
        }

}

上述方法较为麻烦,其实直接求出满足条件 的因子和即可,不用将因子放在数组中,下面为突然想起来的另一种方法,超简单:

方法二::

class WanShu1
{
        public static void main(String[] args)
        {
                 for (int x= 1;x<=10000 ;x++ )
                {
                        int sum = 0;
                        for (int yin=1;yin<x ;yin++ )
                        {
                                if (x%yin==0)
                                {
                                        sum +=yin;
                                }
                        }
                        
                        if (sum ==x)
                        System.out.println(sum);
                }
               
        }
}




2 个回复

倒序浏览
还是第一次听说
回复 使用道具 举报
我也是第一次听说
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马