如果x加上x的各个数字之和得到y,就是说x是y的生成元。给出n(1<=n<=100000),求最小生成元。无解输出0。例如,n=216,121,2005时对应的生成元为198,0,1979。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef maxn 100005
int main()
{
int T, b;
int ans[maxn];
memset(ans, 0, sizeof(ans)); //使ans数组里的数值快速为0
for (int i = 1; i < maxn; i++)
{
int x = i, y = i;
while (x) //此循环求一个数本身和它各位数之和
{
y += x % 10;
x /= 10;
}
if (ans[y] == 0 || i < ans[y]) //
ans[y] = i;
}
scanf("%d", &T);
while(T--)
{
scanf("%d", &b);
printf("%d\n", ans[b]); //打印生成元。
}
return 0;
}