For a positive integer N, the digit-sum of N is defined as the sum of N itself and its digits. When Mis the digitsum of N, we call N a generator of M.For example, the digit-sum of 245 is 256 (= 245 + 2 + 4 + 5). Therefore, 245 is a generator of256.Not surprisingly, some numbers do not have any generators and some numbers have more than onegenerator. For example, the generators of 216 are 198 and 207.You are to write a program to find the smallest generator of the given integer.InputYour program is to read from standard input. The input consists of T test cases. The number of testcases T is given in the first line of the input. Each test case takes one line containing an integer N,1 ≤ N ≤ 100, 000.OutputYour program is to write to standard output. Print exactly one line for each test case. The line is tocontain a generator of N for each test case. If N has multiple generators, print the smallest. If N doesnot have any generators, print ‘0’.Sample Input32161212005Sample Output19801979
#include <iostream>
#include<stdio.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int ans[100005];
//int table(int n)
//{
// memset(ans , 0,sizeof(ans));
// for(int m = 1; m < 100005;m++)
// {
// int x = m,y = m;
// while(x > 0)
// {
// y += x % 10;
// x /= 10;
// }
// if(ans[y] == 0 || m < ans[y])
// ans[y] = m;
//
// }return ans[n];
//}
int main(int argc, char** argv) {
for(int m = 1; m < 100005;m++)
{
int x = m,y = m;
while(x > 0)
{
y += x % 10;
x /= 10;
}
if(ans[y] == 0 || m < ans[y])
ans[y] = m;
}
memset(ans , 0,sizeof(ans));
for(int m = 1; m < 100005;m++)
{
int x = m,y = m;
while(x > 0)
{
y += x % 10;
x /= 10;
}
if(ans[y] == 0 || m < ans[y])
ans[y] = m;
}
int n,t;
scanf("%d",&n);
while(n--)
{
scanf("%d",&t);
printf("%d\n",ans[t]/*table(n)*/);
}
return 0;
}
这个题使用封装函数会超时,