题目链接:POJ 1426 Find The Multiple
题目大意:
给出一个整数(n),求出任意一个它的倍数(m),要求(m)必须只由十进制的('0')或('1')组成。
题解:
所求得的数只含有1或0,所以从1开始深搜,两个方向(n * 10)或者(n * 10 + 1)。
dfs终止条件:找到答案或者当前数的长度大于19(long long最大值就是19位)。
#include <iostream>
using namespace std;
#define ll long long
#define io_speed_up ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
int n;
bool dfs(ll ans, int index) {
if (index > 19) return false;
if (ans % n == 0) {
cout << ans << endl;
return true;
}
if (dfs(ans * 10 + 1, index + 1)) return true;
if (dfs(ans * 10, index + 1)) return true;
return false;
}
int main() {
io_speed_up;
while (cin >> n && n) {
dfs(1, 1);
}
return 0;
}