求1000以内的完数。所谓完数就是它恰好等于它因子之和,例如6的因子为1,2,3。而6=1+2+3。输出如下格式:6 its factors are 1 2 3。
这是我写的代码,费了老大劲儿,感觉不错,贴出来讨论一下。不知道有没有更简洁的写法。
#include <stdio.h>
#include <math.h>
void main()
{
int n=1,arr[60],i,k,m,sum,lflag,rflag;
for(i=1;i<1000;i++)
{m=sqrt(i);
for(k=1,lflag=0,rflag=59,sum=0;k<=m;k++)
{ if(i%k==0)
{ sum+=k;
arr[lflag]=k;
lflag++;
if(i/k!=k&&k!=1)
{sum+=i/k;
arr[rflag]=i/k;
rflag--;
}
}
}
if(i==sum)
{printf("%d its factor are:",i);
for(k=0;k<lflag;k++)printf("%5d",arr[k]);
for(k=rflag+1;k<=59;k++)printf("%5d",arr[k]);
printf("/n");
}
}
getchar();
}