水床房是什么样的:一C语言道编程题

来源:百度文库 编辑:神马品牌网 时间:2024/04/28 16:48:41
一个如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。找出其1000之内的所有完数,并按下面的格式输出其因子:
6 its factors are 1,2,3
程序的运行环境为TC2.0
我的是这样的,请问是哪儿错了啊
#include<stdio.h>
void main()
{
int i,j,k,a;
int sum=0;
for(i=1;i<=1000;i++)

{for(k=2;k<=i;k++)
{ a=i%k;
if(a==0)
sum+=i/k;
}
if(i==sum)
printf("%6d its factors are",i);
for(k=i;k>1;k--)
{ a=i/k;
printf("%d,",a);
}
}
}

这是解答,不过我觉得题目有问题,1难道也是因子吗
#include<stdio.h>
void main()
{
int i,j,k,n;
int a[100];
int sum=0;
for(i=1;i<=10;i++)
{
n = 0;
a[n++] = 1;
k = i;
sum = 1;
while(k>1)
{
for(j=2;j<=k;j++)
{
if(k%j==0)
{
sum += j;
k/=j;
a[n++] = j;
break;
}
}
}

if(i==sum)
{
printf("\n %d = ",i);
for(j=0;j<n-1;j++) printf("%d * ",a[j]);
printf("%d",a[n-1]);
printf(" = ");
for(j=0;j<n-1;j++) printf("%d + ",a[j]);
printf("%d",a[n-1]);
}

}
}

把sum+=i/k;改成 sum+=k;

把for(k=i;k>1;k--)
{ a=i/k;
printf("%d,",a);
}
改成
for(k=i;k>1;k--)
{if(i%k==0)
{a=i/k;
printf("%d,",a); }
}
试试

k代表的是i能整除的数吧!像你举的例子一样是从1开始的,一般整除的要用数的开方形式,以免重复!