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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涵风 中级黑马   /  2014-1-9 18:27  /  1452 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编程实现 求1-1000内所有的完数(一个数如果恰好等于它的因子之和,这个数就称为“完数”。如6就是1个完数: 6=1+2+3,因子数就是所有可以整除这个数的数,但是不包括这个数自身.比如15的因子数是 1 3 5)

8 个回复

倒序浏览
  public static void main(String[]args){
        int sum = 0;
        for(int i = 0;i<=1000;i++){
            sum = 0;
            int arr[] = new int[i];
            for(int j = 1;j < i;j++){
                if(i%j == 0){
                    int k = 0;
                    arr[k] = j;
                    sum += arr[k];
                    k++;
                }
            }if(i == sum){
                System.out.print(i+" ");

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 V_John 于 2014-1-9 19:17 编辑
  1. for (int i = 1; i <= 1000; i++)
  2.             {
  3.                 List<int> list = new List<int>();//集合用来存储因子
  4.                 for (int j = 1; j < i; j++)//对每个数字取因子
  5.                 {
  6.                     if (i%j==0)
  7.                     {
  8.                        //j是i的一个因子
  9.                         list.Add(j);
  10.                     }
  11.                 }
  12.                 //取出因子之后就开始判断完数
  13.                 int sum = 0;//因子之和暂时为0
  14.                 for (int k = 0; k < list.Count; k++)
  15.                 {
  16.                     sum += list[k];
  17.                 }
  18.                 if (sum == i)
  19.                 {
  20.                     //如果因子之和等于这个数字,那么就是因子
  21.                     Console.Write(i+" ");
  22.                 }
  23.                 list.Clear();
  24.             }
  25.             Console.ReadKey();
  26.         }
复制代码

回复 使用道具 举报
本帖最后由 yuanlianxi03 于 2014-1-10 12:11 编辑
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {

  5.         for (int i = 1; i <= 1000; i++) //
  6.         {


  7.             int sum = 1;  //初始化sum为1,因为1是任何整数的因子,直接将sum赋值为1,免去判断1为因子。
  8.             for (int j = 2; j <= Math.Sqrt(i); j++) //从2开始寻找每个数的因子 ,一直到等于开方数
  9.             {
  10.                 if (i % j == 0)  //如果一个数对另一个数求模得0,则其为本数的因子
  11.                 {
  12.                     sum += j;   //加上第一个因子
  13.                     if((i / j) != j)
  14.                         sum += i / j;//加上与第一个因子对应的另一个因子
  15.                 }
  16.             }

  17.             if (sum == i)
  18.             {
  19.                 Console.Write("{0,9}", sum);
  20.             }
  21.         }



  22.         Console.ReadKey();
  23.     }
  24. }
复制代码

回复 使用道具 举报

少判断了一次开方数是不是他的整数因子
回复 使用道具 举报
念~ 发表于 2014-1-10 09:31
少判断了一次开方数是不是他的整数因子

是是,谢谢提醒
回复 使用道具 举报
static void Main(string[] args)
        {
            int count = 0;
            for (int i = 1; i < 1001; i++)
            {
                if (isWNum(i))
                {
                    Console.Write(i + "\t");
                    count++;
                }
                if (count % 5 == 0)
                {
                    Console.WriteLine();
                }  
            }
            Console.Read();
        }
        //判断是否是完数
        static bool isWNum(int n)
        {
            int count = 0;
            for (int i = 1; i < n; i++)
            {
                if (n % i == 0)
                {
                    count += i;
                }
            }
            if (count == n)
            {
                return true;
            }
            return false ;
        }

回复 使用道具 举报
dingyixia,可以试意思写着看判断完数的条件,自己按照
回复 使用道具 举报
自己手写了一个,有什么不足的地方,请多指教。
代码如下:
package com.test.arithmetic;
/**
* 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
* @author yanan.wang
* @version 1.0 11/02/2014
*
*/
public class PerfectNumber {
public static void main(String args[]) {
  /**
   * 求1-100内的完数
   */
  for(int i = 0; i <= 100; i++) {
   if(isPerfectNumber(i) != -1) {
    System.out.print(i + " | ");
   }
  }
}

/**
  * 判断一个数是否是完数
  * 如果是返回自身,如果不是返回-1
  * @param num
  * @return
  */
public static int isPerfectNumber(int num) {
  int total = 0;
  for(int i = 1; i < num; i++) {
   if(num % i == 0) {
    total += i;
   }
  }
  if(total != num) num = -1;
  
  return num;
}

}

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

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