题目:http://poj.org/problem?id=1426
题意:
给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。
注意:
1、要求的这个数,大数肯定不能存,需要用数组存
2、这个数的最高位一定是1
3、剩下的各个位只有两种可能,要么是1,要么是0,用bfs来处理
4、停止bfs的条件是m%n==0,即可以利用上一位的余数×10%n,若等于0,则停止,否则继续。
5、最后是输出部分,利用的是同余模定理处理,把*10操作转化为%2操作,逆向输出就可以了
代码:

1 #include <iostream> 2 #include<cstdio> 3 using namespace std; 4 int mod[600000]; 5 int main() 6 { 7 int n; 8 int i; 9 while(scanf("%d",&n)!=EOF) 10 { 11 if(n==0) 12 break; 13 mod[1]=1%n; 14 for(i=2;mod[i-1]!=0;i++) 15 { 16 mod[i]=(mod[i/2]*10+i%2)%n;//i%2模仿了广搜的两个入口 17 } 18 i--; 19 int j=0; 20 while(i) 21 { 22 mod[j]=i%2;//把*10操作转化为%2操作,逆向求倍数的每一位数字 23 i/=2; 24 j++; 25 } 26 while(j) 27 { 28 cout<<mod[--j]; 29 } 30 cout<<endl; 31 } 32 return 0; 33 }