POJ 1426 Find The Multiple

题目链接: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;
}
posted @ 2020-09-26 00:20  ZZHHOOUU  阅读(341)  评论(0编辑  收藏  举报