思路:由于该题是求一个数是不是“自身数”,而定义一个数是不是“自身数”的根据就是是否有祖先,又因为一个数的祖先一定比这个数要小,所以这就和筛选法很像了。
编程语言:C语言
代码如下:
#include <stdio.h>
int sum(int n)
{
int s = n;
while (n)
{
s += n % 10;
n /= 10;
}
return s;
}
int Check(int x)
{
int i;
if (x < 20)
{
for (i = 0; i < x; i++) if (sum(i) == x) return 0;
}
else if (x < 100)
{
for (i = x - 2 * 9; i < x; i++) if (sum(i) == x) return 0;
}
else if (x < 1000)
{
for (i = x - 3 * 9; i < x; i++) if (sum(i) == x) return 0;
}
else if (x < 10000)
{
for (i = x - 4 * 9; i < x; i++) if (sum(i) == x) return 0;
}
return 1;
}
int main()
{
int i;
for (i = 1; i < 10000; i++)
{
if (Check(i)) printf("%d ", i);
}
return 0;
}