请各位高手帮我看看,这个程序在vs2008中编译的结果,什么地方出了问题?

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

# include <stdio.h>
int main ()
{
int n,i,s;
for (n=2;n<=1000;n++)
{
s=0;
for (i=1;i<n;i++)
{
if (n%i==0)
s=s+i;
     if (s==n)
   {
printf (“%d是完全数。它的因子是:”,n);
for (i=1;i<n;i++)
      {
if (n%i==0)
printf (“%d  “,i);
       }
printf (“\n”);
    }
}
}
return 0;
}
请各位高手帮我看看,这个程序在vs2008中编译的结果,什么地方出了问题?

6分
修改如下:

int main()
{
	int n, i, s;
	for (n = 2; n <= 1000; n++)
	{
		s = 0;
		for (i = 1; i < n; i++)
		{
			if (n % i == 0)
				s = s + i;
		}
		if (s == n)
		{
			printf("%d是完全数。它的因子是:", n);
			for (i = 1; i < n; i++)
			{
				if (n % i == 0)
					printf("%d  ", i);
			}
			printf("\n");
		}
	}
	return 0;
}
7分
一个高效点的版本:

int factors[100];  //存放因子
int main()
{
	int n, i, j, s;
	for (n = 2; n <= 1000; n++)
	{
		s = 0;
		j = 0;
		for (i = 1; i <= n/2; i++)
		{
			if (n % i == 0)
			{
				s = s + i;
				factors[j++] = i;  //记录n的因子
			}
		}
		if (s == n)
		{
			printf("%d是完全数。它的因子是:", n);
			for (i = 0; i < j; i++) printf("%d ", factors[i]);
			printf("\n");
		}
	}
	return 0;
}
//6是完全数。它的因子是:1 2 3
//28是完全数。它的因子是:1 2 4 7 14
//496是完全数。它的因子是:1 2 4 8 16 31 62 124 248
7分
第二个for循环应该只包含紧跟它的if语句,你的目的是对穷举找出n的每个因子并求和。在你的源代码里,把第二个if也包含在内,就会在求n因子的过程中(还没有完全求完,只是部分因子)得到的和与n相同,然后就会输出全部。
多谢各位高手指点!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明请各位高手帮我看看,这个程序在vs2008中编译的结果,什么地方出了问题?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!