Description
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.
Input
The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.
Output
For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.
Sample Input
2 6 19 0
Sample Output
10 100100100100100100 111111111111111111
给一个n,让你输出一个n的倍数,且这个数是由0, 1组成的。
由于由0, 1组成,那么这个数能被10或11整除,bfs即可。
AC代码:
#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
using namespace std;
const int MAXN = 1e7 + 5;
typedef long long ll;
int n;
ll q[MAXN];
ll bfs()
{
int front = 0, rear = 0;
q[rear++] = 1;
while(1) {
ll tmp = q[front++];
if((tmp * 10) % n == 0) return tmp * 10;
if((tmp * 10 + 1) % n == 0) return tmp * 10 + 1;
q[rear++] = tmp * 10;
q[rear++] = tmp * 10 + 1;
}
return -1;
}
int main(int argc, char const *argv[])
{
while(scanf("%d", &n) != EOF && n)
printf("%lld\n", bfs());
return 0;
}