黑马程序员技术交流社区

标题: 求完数---高手和新手请来 [打印本页]

作者: 爆炸头    时间: 2015-4-29 22:09
标题: 求完数---高手和新手请来
/*
我觉得下面的程序思路对,但是没有输出,请大神解答
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
*/
class  Demoa
{
        public static void main(String[] args)
        {
               
                int sum=0;

               
                for(int i=6;i<=1000;i++)
                {
                       
                        for(int j=1;j<i;j++)
                        {       
                                if(i/j==0)
                                {
                                        sum+=j;
                                               
                                }
                        }
                        if(sum==i)
                        {
                                System.out.println(i);
                                sum=0;
                        }
                       

                }
       
}



作者: 黄冬    时间: 2015-4-29 22:13
本帖最后由 黄冬 于 2015-4-29 22:22 编辑

貌似很难的样子,坐等答案吧!

作者: 碎裂的空格键    时间: 2015-4-29 22:14
没大看明白,坐等大神出现。
作者: lshaizj    时间: 2015-4-29 22:32
同求同求!
作者: zhaoweiyan    时间: 2015-4-29 23:33
class Demoa
{
        //for(int x=1;x<1000;x++)
        public static void main(String[] args)
        {
       
        int sum=0;
        for(int x=1;x<1000;x++)
                {
                for(int y=1;y<x;y++)
                       
                        if(x%y==0)
                  {
                                        //System.out.println()
                                        sum=sum+y;
                          }
                          if(sum==x)
                          System.out.println(sum+"  ");
                          sum=0;
                       
                          
                }
        }
}

x/y==0是不对的,应该是x%y==0;;;;;;;还有sum=0,下边的设置应该在if(sum==x)外边
作者: lclxjzz    时间: 2015-4-29 23:39
看看····
作者: li514620797    时间: 2015-4-29 23:40
额好好看看吧
作者: as12510    时间: 2015-4-30 00:49
利用数组 将每次的结果放进数组  
然后利用遍历将数组的数据和求出来和 本身 进行比较
如果相等 就输出  X和对应的每个质数
class Game {
        public static void main(String[] args) {
                for(int x = 2;x<1000 ; x++){
                        int[] arr = new int [1000];
                       
                        int sum = 0;
                        int index = 0;
                        int i = 1;
                        //定义获取每个质数的数组并 依次放入数组内
                                while(true){
                                        if(x % i == 0 && x != i){
                                                arr[index] = i;
                                                index ++;
                                                i++;
                                        }else if (i>x){
                                                break;
                                        }else {
                                                i++;
                                        }
                                }
                                       
                for(int a = 0; a<arr.length ; a++){
                                sum += arr[a];
                        }

                if (sum == x){
                        System.out.print(x+"=");
                       
                        for(int b = 0; b<arr.length ; b++){
                               
                                if (arr[b]>0){
                                                System.out.print(arr[b]+"+ ");
                                        }
                                }
                                System.out.println();
                        }
                       
                }
               
        }
}

作者: qian0217wei    时间: 2015-4-30 01:27
本帖最后由 qian0217wei 于 2015-4-30 01:31 编辑
  1. package com.itheima;

  2. /**
  3. * @author 钱伟
  4. *
  5. */
  6. class Text {
  7.         public static void main (String[] args) {
  8.                 for (int i = 6; i <=1000; i++)
  9.                 {
  10.                         int sum = 0;
  11.                         for (int j = 1; j <= i/2; j++)
  12.                         {
  13.                                 if (i % j == 0) //求i的因子
  14.                                 sum =sum + j;
  15.                         }
  16.                         if (sum == i)
  17.                                 System.out.println(i);
  18.                 }

  19.         }
  20. }
复制代码

这是在你基础上改的打印结果是6
28
496

注意求因子不是/而是求模%
还有对j只需判断到i/2即可



作者: 爆炸头    时间: 2015-5-1 09:09
zhaoweiyan 发表于 2015-4-29 23:33
class Demoa
{
        //for(int x=1;x

谢谢哈~~~~~~~已经弄出来了
作者: 爆炸头    时间: 2015-5-1 09:13
qian0217wei 发表于 2015-4-30 01:27
这是在你基础上改的打印结果是6
28
496

哈哈  对 谢谢  我把sum定义到for循环外面了, 判断到i/2就可以。
作者: 爆炸头    时间: 2015-5-1 09:46
碎裂的空格键 发表于 2015-4-29 22:14
没大看明白,坐等大神出现。

/*
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
*/
class  Demoa
{
        public static void main(String[] args)
        {
               
                //int sum=0;

               
                for(int i=2;i<=1000;i++)
                {
                        int sum=0;
                        for(int j=1;j<=i/2;j++)
                        {       
                                if(i% j==0)
                                {
                                        sum+=j;
                                               
                                }
                        }
                        if(sum==i)
                        {
                                System.out.println(i);
                                //sum=0;
                        }
                       

                }
        }
       
}





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