因为是special judge, 找出一组解即可。用DFS, 记得及时退出。同时unsigned long long足够表示最后的答案, 不需要使用高精度。
#include <iostream>
#include <cstdio>
using namespace std;
int flag, n;
int dfs(unsigned long long a, int step)
{
if (flag == 1 || step == 19)
return 0;
else if (a % n == 0)
{
printf("%lld\n", a);
flag = 1;
return 1;
}
else
{
if (!dfs(a * 10, step + 1))
{
dfs(a * 10 + 1, step + 1);
}
}
}
int main()
{
while (scanf("%d", &n), n)
{
flag = 0;
dfs(1, 0);
}
}