问题描述
如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。
样例输入
3
216
121
2005
样例输出
198
0
1979
解题思路
输入的数最多为6位,因此其生成元至少为n-54。54是由6*9=54得到,然后使用暴力即可
AC的C++程序
#include<iostream>
using namespace std;
int getsum(int n)
{
int t=0,m=n;
while(m){
t+=m%10;
m/=10;
}
return t+n;
}
int geneartor(int n)
{
for(int i=n-54;i<=n;i++)
if(getsum(i)==n)
return i;
return 0;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
printf("%d\n",geneartor(n));
}
return 0;
}