思路:自私数是没有数+每个位上的数可以得到的,所以建立一个数组,把可以变化得到的数记录下来,输出的时候不输出这些数就好;
代码如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;
int a[1000010];
void judge(int n) //将变化后的数对应的数组中的位置变成0,表示这个数不是自私数
{
int sum=n;
while(n)
{
sum+=n%10;
n/=10;
}
a[sum]=0;
}
int main()
{
int i;
memset(a,1,sizeof(a));
for(i=1;i<1000005;i++)
{
if(a[i])
printf("%d\n",i);
judge(i);
}
return 0;
}