poj 1426 Find The Multiple(bfs)

题目: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 #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 }

 

原文地址:https://www.cnblogs.com/wanglin2011/p/2878210.html