思路:枚举1~1000000之间的每个数n产生的d(n),用一个数组arr记下来,arr[i]的值为0,则i为自我数;arr[i]的值为1,则i不是自我数;初始时,arr[i]为0。
完整代码:
#include<stdio.h>
int main()
{
int arr[1000001] = {0};//通过数组判断该数是否为自我数
int temp,sum,i;
for(i=1;i<=1000000;i++)
{
if(!arr[i]) printf("%d\n",i);//当arr[i]为0时打印输出
temp = i;
sum = i;
while(temp)
{
sum += temp%10;
if(sum>1000000)break;
temp /= 10;
}
if(sum<=1000000)arr[sum] = 1;
}
return 0;
}