求大神指点,题目如下,要把 1 到 10000 的自我数输出来,可是输出只剩下后面了
求大神指点,题目如下,要把1到10000的自我数输出来,可是输出只剩下后面了1949年,印度数学家D.R.Kaprekar发现了一类叫做自我数(self number)的数。对于任一正整数n,定义d(n)为 n 加上 n 的每一位数字得到的总和。
例如,d(75) =75+7+5=87。
取任意正整数n作为出发点,你可以建立一个无穷的正整数序列 n, d(n), d(d(n)) ……
例如,如果你从33开始,下一个数字就是33+3+3=39,再下一个是39+3+9=51,再下一个是51+5+1=57,…。如此便产生一个整数数列:
33, 39, 51, 57, 69, 84, 96 ,111, 114 ,120 ,123, 129, 141,……
数字n被叫做整数d(n)的生成器。在如上的数列中,33是39的生成器,39是51的生成器,51是57的生成器,等等。
有些数字有多于一个生成器,如101有两个生成器,91和100。而一个没有生成器的数字则称作自我数(self number)。100以内的自我数共有13个:1,3,5,7,9,20,31,42, 53,64,75,86和97。
#include<stdio.h>
int main()
{
long a[10000];
long i;
for(i=0;i<10000;i++)
a[i]=0;
for(i=1;i<10000;i++)
{if(i<=9)
a[i+i]=1;
if(i>9&&i<=99)
a[i+i/10+i%10]=1;
if(i>99&&i<=999)
a[i+i/100+i%100/10+i/100%10]=1;
if(i>99&&i<=999)
a[i+i/100+i/10+i%10]=1;
if(i>999&&i<=9999)
a[i+i/1000+i%1000/100+i%1000%100/10+i%10]=1;
}
for(i=1;i<10000;i++)
if(a[i]==0)
printf("%ld\n",i);
return 0;
}