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
26190
Sample Output
10100100100100100100111111111111111111
題目大意:給定一個正整數,求這個數的倍數(只由'1' '0'組成)
思路:BFS 假設M不符合 則在M基礎上有兩種情況M1和M0 將這兩種情況都入隊,然後求出合格M
#include<iostream>using namespace std;char queue[10000000];int head,rear,n;char *pop(){return &queue[head++%10000000];}void push(char i){queue[rear++%10000000]=i;}void bfs(){int i;while(head!=rear){int mod=0,lenth;lenth=*pop();for(i=1;i<=lenth;i++)mod=(10*mod+(*pop()-48))%n;if(mod==0){for(i=lenth;i>0;i--)cout<<queue[(100000000+head-i)%100000000];//cout<<endl<<head;cout<<endl;return;}else{push(lenth+1);for(i=lenth;i>0;i--)push(queue[(100000000+head-i)%100000000]);push('1');push(lenth+1);for(i=lenth;i>0;i--)push(queue[(100000000+head-i)%100000000]);push('0');}}}int main(){while(cin>>n&&n){head=rear=0;push(1);push('1');bfs();}return 0;}