标题:一个求完数的一种方法为何不对?
只看楼主
way3
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-12-8
 问题点数:0 回复次数:7 
一个求完数的一种方法为何不对?
今天我帮别人写一个简单的程序,简单程序不简单呀,出现让我不思其问题?实在要请高手帮忙了.
下面是第一种方法.

#include "stdio.h"
main()
{
   int n,i,j,c[10]={0},m=0;
   for(i=1;i<=1000;i++)
 {
  for(j=1;j<i;j++)
   {
     if(i%j==0)
     c[m]=j;
     m++;
   }
 if(i==c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9])
  printf("%d\t", i);
  }
}
用TC是行不通的.报发生什么指令性错误,还有什么应用程序错误,该内存不能读之类的.用VC开始也出现了错误,多运行了几次,结果不全.只有6,而用下面的方法就全了,
 #include "stdio.h"
main()
{
 int j,i,s;
 for(i=2;i<1000;i++)
  {  s=i;
  for(j=1;j<i;j++)
    {
      if(i%j==0)
      s=s-j;
    }
 if(s==0)
 printf("%d\n", i);
  }
}
 答案是6,28,196符合要求.
我就郁闷了,为什么会出现这样的情况了,真是不思其解呀.请高手不甚指教,偶会铭记于心,感激涕零呀.提醒一句1000以内的所有数的因子数没有超过10个,所以用c[10]没有错吧.

[[italic] 本帖最后由 way3 于 2008-1-9 20:22 编辑 [/italic]]
搜索更多相关主题的帖子: 内存 指令性 int main 
2008-01-09 20:15
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
什么规则
2008-01-09 20:32
way3
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-12-8
得分:0 
补充一下概念,一个数如果恰好等于它的因子之和,这个数就称为“完数”。能够被他整除的数称为因子.
2008-01-09 20:39
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
得分:0 
i层循环中应对c[]进行初始化,否则,下次循环时有可能用到上次的c[]数据。
举个例子
i=8时
c[0]=1, c[1]=2, c[2]=4, c[3].....c[9]=0;
如不对c[]进行初始化,则
当n=9时
c[0]=1,c[1]=3,c[2]=4,c[3]......c[9]=0;
显然,将i和sum of c[]比较是没有意义的。
2008-01-09 20:53
way3
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-12-8
得分:0 
这个问题我终于弄明白了,c[0]=1, c[1]=2, c[2]=4, c[3].....c[9]=0;有一个笔误,就是c[2]=3,非常的感谢lonmaor,
2008-01-09 22:54
way3
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-12-8
得分:0 
忘了感谢大家,在此感激涕零.
 代码如下供参考:
 #include<stdio.h>
main()
{
    int i,j,k,c[50]={0},m=0;
    for(i=2;i<=1000;i++)
  {
    m=0;
    for(k=0;k<50;k++)
    c[k]=0;
    for(j=1;j<i;j++)
     {
            if(i%j==0)
        {
            c[m]=j;
            m++;
        }
             
      }
    if(i==(c[0]+c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]))
    printf("%d\n", i);
    
  }
}
2008-01-09 23:02
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
好写的不错
2008-01-09 23:09
苦中求乐
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-10-27
得分:0 
楼主,把程序改成这样是不是更好一些?
#include<stdio.h>
main()
{
    int i,j,sum=0;
    for(i=2;i<=1000;i++)
  {
    sum=0;
    for(j=1;j<i;j++)
     {  if(i%j==0)
        {
          sum+=j;
        }            
     }
    if(sum==i)
    printf("%d\n", i);
  }
}

笨鸟先飞。可惜我既笨又懒!
2008-01-10 17:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-196739-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.361211 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved