题目就是寻找一个数m,使得m%n=0,且有m中只包含0和1 。这一题是参考别人的思想写的。由于m中只包含0和1,我们得知m的最高位必然为1,那么由这一点我们就可以开始搜索了。如果m%n != 0 , 那么需要在m后添加1或者添加0,然后进行判断。我们用一个队列来维护这样一个m的序列集合。然后不断的判断。代码如下:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std ;
#define MAXN 9999999
long long q[MAXN] ;
int n ;
void bfs(){
int front ;
int rear ;
rear = 0 ;
front = 0 ;
q[front] = 1 ;
rear ++ ;
long long top ;
while(rear > front){
top = q[front] ;
if(top % n == 0){
break ;
}
top *= 10 ;
q[rear] = top ;
rear ++ ;
q[rear] = top + 1 ;
rear ++ ;
front ++ ;
}
printf("%lld\n" , top) ;
}
int main(){
while(cin>>n && n)
bfs() ;
return 0 ;
}