新手请教一个C语言程序问题?

来源:百度知道 编辑:UC知道 时间:2024/05/02 21:19:20
已知有如下程序,它的功能是求6~1000的完数的,所谓完数就是一个数如果恰好等于它的因子之和,这个数就称为是“完数”。例如 :数字6,它的因子为1、2、3,而6=1+2+3,因此,6是“完数!下面程序中的运行结果:
6 is a wan shu,it is yin zhi is :1,2,3
6 is a wan shu,it is yin zhi is :1,2,3
6 is a wan shu,it is yin zhi is :1,2,3
6 is a wan shu,it is yin zhi is :1,2,3
6 is a wan shu,it is yin zhi is :1,2,3
有N条以上一样的,我的要求是请改正程序中的不足地方,使其运行结果为:
6 is a wan shu,it is yin zhi is :1,2,3
28 is a wan shu,it is yin zhi is :?????
496 is a wan shu,it is yin zhi is :???
即每行显行不同的完数,而不是一个完数显示N行

#include <stdio.h>
main()
{
int i,j,z,n,s,a[10];
clrscr();
for (i=6;i<=1000;i++)
{
s=0;
n=-1;
for (j=1;j<=i-1;j++)
{
if (i%j==0)
{
s=s+j;
n++;
a[n]=j;
}
}
if (s==i)
{
printf("%d is a wan shu,it is yin zhi is :",j)

#include <stdio.h>
main()
{
int i,j,z,n,s,a[100],k;
clrscr();
for (i=6;i<=1000;i++)
{
s=0;
n=-1;
for (j=1;j<=i-1;j++)
{
if (i%j==0)
{
s=s+j;
n++;
a[n]=j;
}
}
if (s==i)
{
printf("%d is a wan shu,it is yin zhi is :",j) ;
for(k=0;k<n;k++)
printf("%d,",a[k]);
printf("%d\n",a[n]);
}
}

}

有两个bug,一个是你的循环变量i在循环结束前重复了,第二个是你的a[10]这个缓冲区太小,溢出了。