题目: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操作,逆向输出就可以了
代码:
View Code
1 #include2 #include 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<