Find The Multiple--POJ1426
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任意一个倍数而这个数是只有0和1构成的十进制整数,输出任意符合题意的答案即可;
我们可以输出最小的符合条件的;这个数第一位一定为1;接着判断10,11,101,100,110,111......;可以用bfs来写;
代码如下:
#include <iostream> #include <cstdio> #include <algorithm> #include <queue> using namespace std; __int64 bfs(int n) { queue<__int64>Q; Q.push(1); long long q; while(!Q.empty()) { q=Q.front(); Q.pop(); if(q%n==0) return q; Q.push(q*10); Q.push(q*10+1); } return -1; } int main() { int n; __int64 ans; while(scanf("%d",&n),n) { ans=bfs(n); printf("%I64d\n",ans); } return 0; }