C语言新手入门题目,求大神指导

C语言 码拜 9年前 (2015-05-11) 875次浏览 0个评论

题目如下:一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有“完数”,并按下面的格式输出其因子:6 Its factors are 1,2,3 
源代码如下:#include <stdio.h>
int main()
{
int i,j,m,k,l=0;
int a[20];
for(i=2;i<=1000;i++)
{k=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{a[k]=j;
l+=a[k];
k++;
}}
if(l==i)
{
printf(“%d its facrors are”,i);
for(m=0;a[m+1]==””\0″”;m++)
printf(“%d,”,a[m]);
printf(“%d\n”,a[m]);
}
}
return 0;
}
为什么每次一运行就停止工作?到底是哪里的问题?求指导啊

10分
设个断点调试。
l += a[k];这句话中k越界了,你数组a只有20个空间,k远远大于20
10分
if (l == i)
{
printf(“%d its facrors are”, i);
for (m = 0; m<k; m++)
printf(“%d,”, a[m]);
80分
修改如下:

int main()
{
	int i, j, m, k, l;
	//int a[20];
	int a[1000];
	for (i = 2; i <= 1000; i++)
	{
		k = l = 0;
		memset(a, 0, sizeof(int) * 1000);
		for (j = 1; j < i; j++)
		{
			if (i % j == 0)
			{
				a[k] = j;
				l += a[k];
				k++;
			}
		}
		if (l == i)
		{
			printf("%d its facrors are ", i);
			for (m = 0; a[m + 1]; m++)
				printf("%d,", a[m]);
			printf("%d\n", a[m]);
		}
	}
	return 0;
}
//6 its facrors are 1, 2, 3
//28 its facrors are 1, 2, 4, 7, 14
//496 its facrors are 1, 2, 4, 8, 16, 31, 62, 124, 248

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言新手入门题目,求大神指导
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!