题目链接:http://poj.org/problem?id=1426
Time Limit: 1000MS Memory Limit: 10000K

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

Problem solving report:

Description: 求任意一个是n的倍数,且每一位只能是0或1的数。
Problem solving: BFS,从最低的1开始枚举,对于每一位的两种情况进行判断,合理即输出,注意使用STL的queue会TLE,改用自己手写的才125MS左右,差别真的很大。

Accepted Code:

#include <cstdio>
#include <cstring>
typedef long long ll;
const int MAXN = 1e7;
ll Q[MAXN];
ll BFS(int n) {
    int l = 0, r = 0;
    Q[r++] = 1;
    while (l < r) {
        ll t = Q[l++];
        if (!(t % n))
            return t;
        Q[r++] = t * 10;
        Q[r++] = t * 10 + 1;
    }
    return -1;
}
int main() {
    int n;
    while (scanf("%d", &n), n) {
        printf("%lld\n", BFS(n));
    }
    return 0;
}