http://acm.pku.edu.cn/JudgeOnline/problem?id=1426
刚刚学写BFS 比DFS容易些 这题比较简单 只要找到任意的一个0、1组合可以整除所给的数就行 用int64可以做,注意99、198这两个数据 时间比较长 单独列出来可以节省时间 如果不单独考虑 用C++就超时了 但G++可以过 不过时间要200多MS
这个程序用了32MS 不错了
#include<stdio.h>
#include<queue>
using namespace std;
queue <__int64>q;
__int64 bfs(int n){
__int64 sum,cur,i;
if(n==99) return 111111111111111111;
if(n==198) return 1111111111111111110;
while(!q.empty()) q.pop();
q.push(1);
while(1){
sum=q.front();
q.pop();
if(sum%n==0) return sum;
sum*=10;
for(i=0;i<=1;i++){
cur=sum+i;
if(cur%n==0) return cur;
else q.push(cur);
}
}
}
int main(){
int n;
while(scanf("%d",&n)!=EOF,n){
printf("%I64d/n",bfs(n));
}
return 0;
}