完美数代码看不懂,求注释

Ubunman 2012-09-03 11:20:33
#include "stdio.h"
#include "conio.h"
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j<=1000;j++)
{
n=-1;
s=j;
for(i=1;i<j;i++)
{
if((j%i)==0)
{
n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf("%d is a wanshu\n",j);
for(i=0;i<n;i++)
printf("%d",k[i]);
printf("%d\n",k[n]);

}
}
getch();
}

最好是每一行都注释一下,小弟刚看完基础的C,在看WIN-TC里面的程序100例。

看的这里实在是迷糊,如果k[10]超过10个了呢,在限制10000以下或者更大的数(比如8128、33550336)呢?

求代码,最好是C,或者是一个思路也行,我自己慢慢琢磨。我自己百度了,但是有2篇代码我输入都不能正确输出。

(哎,发帖的分快没有了,看来又要注册一个了)
...全文
180 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xspace_time 2012-09-04
  • 打赏
  • 举报
回复
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
各个小于它的约数(真约数)的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。(列出某数的约数,去掉该数本身,剩下的就是它的真约数)   例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。第三个完全数是496,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余10个数相加,1+2+4+8+16+31+62+124+248+496。后面的完全数还有8128、33550336等等。
for(i=1;i<j;i++)
{
if((j%i)==0)
{
n++;
s=s-i;//从1到小于j的一个数 如果i能被j整除(即余数等于零) 则i是j的约数 那么s减去这个约数再寻找下一个约数 直到<j找完 如果s=j减去这些约数的结果为0 那么就是说这些约数之和等于s=j 那么j就是完数
其实真理根本不用小于j 直接到j-3就可以
k[n]=i;
}
}

k[10]显然太小 很快就溢出了 所以依然测试1000个 那么改为k[1000]就够了
Ubunman 2012-09-04
  • 打赏
  • 举报
回复

谢谢,懂了
Ubunman 2012-09-03
  • 打赏
  • 举报
回复

眼看要沉,搭把手。。。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧