方法一
#include"stdio.h"
#include"math.h"
void sortPosition(int a[],int n);
void main()
{
int i,j,s,n;
int a[1000];
int count=0;
printf("1000以内的完数 ");
for(i=1;i<=1000;i++)
{
s=1;
a[0]=1;
n=1;
for(j=2;j<sqrt(i);j++)
{
if(i%j == 0)
{
s += j+i/j;
//s+=i/j;
a[n]=j;
a[++n]=i/j;
n++;
}
}
sortPosition(a,n);
if(s==i && s!=1)
{
printf("%d 完数是",i);
count++;
for(j=0; j<n; j++)
{
printf("%d ",a[j]);
}
printf(" ");
}
}
printf(" 1000以内的完数有%d个 ",count);
}
void sortPosition(int a[],int n)
{
int i,j,temp;
for(i=0;i<=n-1;i++)
{
for(j=i+1;j<=n-1;j++)
{
if(a[j]<a[i])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
}
#include"math.h"
void sortPosition(int a[],int n);
void main()
{
int i,j,s,n;
int a[1000];
int count=0;
printf("1000以内的完数 ");
for(i=1;i<=1000;i++)
{
s=1;
a[0]=1;
n=1;
for(j=2;j<sqrt(i);j++)
{
if(i%j == 0)
{
s += j+i/j;
//s+=i/j;
a[n]=j;
a[++n]=i/j;
n++;
}
}
sortPosition(a,n);
if(s==i && s!=1)
{
printf("%d 完数是",i);
count++;
for(j=0; j<n; j++)
{
printf("%d ",a[j]);
}
printf(" ");
}
}
printf(" 1000以内的完数有%d个 ",count);
}
void sortPosition(int a[],int n)
{
int i,j,temp;
for(i=0;i<=n-1;i++)
{
for(j=i+1;j<=n-1;j++)
{
if(a[j]<a[i])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
}
方法二
#include<stdio.h>
void main()
{
int i,j,s,n;
int a[1000];
int count=0;
printf("1000以内的完数 ");
for(i=2;i<=1000;i++)
{
s=0;
n=0;
for(j=1;j<i;j++)
{
if(i%j == 0)
{
s += j;
a[n++]=j;
}
}
if(s == i)
{
printf("%d ",s);
count++;
//printf("%d 完数是 ",n);
for(j=0; j<n; j++)
printf("%d ",a[j]);
printf("
");
}
}
printf("
1000以内的完数有%d个
",count);
return 0;
}