在线个人名片生成器:c语言问题?在线等

来源:百度文库 编辑:高考问答 时间:2024/04/30 07:58:59
题目:如果一个数等于其所有真因子(不包括其本身)之和,则该数为完数,例如6的因子有1、2、3,且6=1+2+3,故6为完数,求2~1000中的完数。
没有答案的:
#include<stdio.h>
main()
{
int n,k,s=0;
for(n=2;n<=1000;n++)
{
for(k=1;k<n;k++)
if(n%k==0)s=s+k;
if(s==n)printf("%5d",n);
}
}

正确的:
#include<stdio.h>
main()
{
int n,k,s=0;
for(n=2;n<=1000;n++)
{
for(k=1;k<n;k++)
if(n%k==0)s=s+k;
if(s==n)printf("%5d",n);
}
}

为什么定义s=0的值不同,而影响了结果呢?

#include<stdio.h>
main()
{
int n,k;
for(n=2;n<=1000;n++)
{
int s=0;
for(k=1;k<n;k++)
if(n%k==0) s=s+k;
if(s==n)printf("%5d",n);
}
}
s要在每次开始新的查询时刷0,否则你就在滚雪球,s只会越滚越大,永远不会有答案

两段怎么看都一样,都是错的,S=0位置摆错了,你每次都应该清0的

s要放在循环里

两段程序一样啊,搞什么