#include <stdio.h> #define N 10000 unsigned g[N]; unsigned sum_of_digits(unsigned n)//用递归函数方法对n的每位数字进行相加 { if(n<10) return n; return (n%10)+sum_of_digits(n/10); } void generate_sequence(unsigned n) { while(n<N) { unsigned next=n+sum_of_digits(n);//此时n就是next的生成数 if(g[next]>N||g[next]!=next)//g[next]!=next成立说明next不是自数,则返回 return ; g[next]=n;//用于main函数中g[n]==n语句的判断 n=next;//继续进行while循环,判断next是否为自数 } } int main() { unsigned n; for(n=1;n<N;++n) g[n]=n; for(n=1;n<N;++n) generate_sequence(n); for(n=1;n<N;++n) if(g[n]==n) printf("%u ",n); }