http://codepad.org/cTao3Kvg
/*生成元
*如果X加上X的各个数字之和得到Y,就说X是Y的生成元。给出N,N在1到100000之间,求最小生成元
*提高效率,可以查表进行计算*/
#include<stdio.h>
#include<string.h>
#define maxn 100005
int ans[maxn];//较大的数在函数外部定义
int main(){
int T,n;
memset(ans, 0, sizeof(ans));
for(int m=1; m<=maxn; m++){
int x = m;
int y = m;
while(x > 0){
y += x %10;
x = x / 10;
}
if(ans[y] == 0 || m < ans[y])
ans[y] = m;
}//求出所有结果
scanf("%d", &n);
printf("%d\n", ans[n]);
return 0;
}