题意

给你一个数n,你要找出一个只由0和1组成的不超过100位的数,使得该数是n的m倍

思路

这是一道BFS题,入队的时候有两种情况:一种是10t;一种是10t+1;这题还有个坑点是用C++的STL的队列会T,所以需要自己写一个队列

题目链接

http://poj.org/problem?id=1426

代码

#include<iostream>
#include<queue>
using namespace std;
long long a[10000000];
long long bfs(int N) {
	int front = 0;
	int rear = 0;
	a[rear++] = 1;
	while (front != rear) {
		long long tmp = a[front++];
		if (tmp % N == 0) {
			return tmp;
		}
		a[rear++] = tmp * 10;
		a[rear++] = tmp * 10 + 1;
	}
	return -1;
}

int main() {
	int N;
	while (cin >> N) {
		if (N == 0)break;
		cout << bfs(N) << endl;
	}
	return 0;
}