供参考:
#include <stdio.h>
int isperfect(int n)
{
int i, s;
if (n < 6) return 0;
for (i = 2, s = 1; i <= n / 2; i++)
if (n % i == 0) s += i;
return s == n;
}
int main()
{
int N, i, n;
while (1)
{
if (scanf("%d", &N) != 1) break; //ctrl + z 结束输入
printf("%d:", N);
for (i = 1, n = 0; i <= N; i++)
if (isperfect(i))
printf(n++ == 0 ? "%d" : " %d", i);
if (!n)
printf("NULL");
printf("\n");
}
return 0;
}
10000以内的完数一共就4个,一位数一个,2位数一个,3位数一个,4位数一个
你判断输入的范围,直接print就行了,根本不用算
if(n<=5)
printf("NULL");
其余类推,保证不超时