C语言程序:求1000以内的完数并且并且按照以下格式输出因子: 6 its factors are 1,2,3

程序我已编好为什么只能输出1行?不能输出28 和496?求大神解答,帮我找程序的漏洞
#include<stdio.h>
#include<math.h>
int main ()
{int i,j,k;
int sum=1;
printf("完数如下");
for(j=6;j<1000;j++)
{
for(i=2;i<=sqrt(j);i++)
{if(j%i==0)
sum=sum+i+j/i;}
if(sum==j)
{printf("\n%d its factors are:1",sum);
for(k=2;k<=sqrt(sum);k++)
{if(sum%k==0)
printf(",%d,%d",k,sum/k);}}

}
}

//楼上的完全错了,不信你自己运行试试
#include<stdio.h>
void main()
{
int i,j,k;
int sum=1;
printf("完数如下:");
for(j=6;j<1000;j++)
{
sum = 1;   //每次循环都要将sum赋值1
for(i=2;i<=j/2;i++) //这个需要小于j/2,而不是sqrt(j)
{
if(j%i==0)
sum=sum+i;
}
if(sum==j)
{
printf("\n%d its factors are:1",sum);
for(k=2;k<=j/2;k++)//这个需要小于j/2,而不是sqrt(sum)
{
if(sum%k==0)
printf(",%d",k);
}
}
}
printf("\n");
}

追问

方法不同,我一次输出2个,数字大小位置不如你的整齐,不过题目没要求就算了吧

追答

不是说输出,而是计算是否是完数的方法,需要小于j/2,而不是sqrt(j)。
拿6来说,3是6的因子,但是3却大于sqrt(6)

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-15
#include<stdio.h>
#include<math.h>
int main()
{
int i, j, k;
int sum = 1;
printf("完数如下");
for (j = 6; j<1000; j++)
{
sum = 1; //加上这句。sum每次用完没有从新初始化
for (i = 2; i <= sqrt((float)j); i++)
{
if (j%i == 0)
sum = sum + i + j / i;
}
if (sum == j)
{
printf("\n%d its factors are:1", sum);
for (k = 2; k <= sqrt((float)sum); k++)
{
if (sum%k == 0)
printf(",%d,%d", k, sum / k);
}
}

}
}本回答被提问者采纳
第2个回答  2014-05-21

/*

完数如下

6 its factors are:1,2,3

28 its factors are:1,2,4,7,14

496 its factors are:1,2,4,8,16,31,62,124,248


Press any key to continue

*/

#include <stdio.h>
#include <math.h>
int main () {
int i,j,n,k,sum;
int factors[10];
printf("完数如下\n");
for(n = 6;n < 1000; ++n) {
sum = 1;
k = n;
j = 0;
for(i = 2;i <= k/2;i++) {
if(k%i == 0) {
sum += i;
factors[j++] = i;
}
}
if(sum == n) {
printf("%d its factors are:1",sum);
for(i = 0; i < j; ++i)
printf(",%d",factors[i]);
printf("\n");
}
}
printf("\n");
return 0;
}

相似回答