| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 659 人关注过本帖
标题:一个求1000以内完数的疑问 求解
只看楼主 加入收藏
Xsing
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-11-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
一个求1000以内完数的疑问 求解
一个求1000以内的完数程序
main()
{ int i,j,s;
  for(i=2;i<=1000;i++)
  { s=0;
    for(j=1;j<i;j++)
     if(i%j==0) s=s+j;
    if(s==i)
     { printf("%d ",i);
       for(j=1;j<i;j++)
    if(i%j==0) printf("%d ",j);
       printf("\n");
     }
  }
  system("pause");
}
这个能正常输出结果 但是如果把 把S=0 放在声明部分 就不显示结果 如下
main()
{ int i,j,s;
  s=0;
  for(i=2;i<=1000;i++)
  {     for(j=1;j<i;j++)
     if(i%j==0) s=s+j;
    if(s==i)
     { printf("%d ",i);
       for(j=1;j<i;j++)
    if(i%j==0) printf("%d ",j);
       printf("\n");
     }
  }
  system("pause");
}
求大神 指点下为什么
搜索更多相关主题的帖子: system 
2012-11-29 17:28
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
收藏
得分:4 
放在声明部分的话,s不是每次都从0
开始加的,得不出正确结果
2012-11-29 17:30
张朝成
Rank: 4
等 级:业余侠客
帖 子:149
专家分:265
注 册:2012-3-22
收藏
得分:4 
放在循环体外面,它当然就只执行一次,而你放在循环体里面的话,它就执行999次。
2012-11-29 17:33
c语言新手yu
Rank: 2
等 级:论坛游民
帖 子:38
专家分:17
注 册:2012-11-5
收藏
得分:4 
路过
2012-11-29 17:43
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:4 
完数是指它所有的真因子(即除了自身以外的约数)的和(即因子函数)恰好等于它本身的数。因此你的代码里面是对于1到1000每个数分别求它的所有真因子,并求和,用s表示。所以对于1到1000的每个数,进行计算真因子和的时候,都要重新把s设为0.所以必须将s=0放到第一个for循环里面,放到外面得不到正确结果也就不会输出了。
2012-11-29 22:11
Fisher~
Rank: 4
等 级:业余侠客
帖 子:93
专家分:222
注 册:2012-11-10
收藏
得分:4 
楼上说的已经很详细了我就不多说了
2012-11-30 17:00
快速回复:一个求1000以内完数的疑问 求解
数据加载中...
 
   



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

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