[kuangbin带你飞]专题一 简单搜索 - E - Find The Multiple

 1 //Memory Time
 2 //2236K  32MS 
 3 
 4 #include<iostream>
 5 using namespace std;
 6 
 7 int mod[524286];  //保存每次mod n的余数
 8                   //由于198的余数序列是最长的
 9                   //经过反复二分验证,436905是能存储198余数序列的最少空间
10                   //但POJ肯定又越界测试了...524286是AC的最低下限,不然铁定RE
11 
12 int main(int i)
13 {
14     int n;
15     while(cin>>n)
16     {
17         if(!n)
18             break;
19 
20         mod[1]=1%n;  //初始化,n倍数的最高位必是1
21 
22         for(i=2;mod[i-1]!=0;i++)  //利用同余模定理,从前一步的余数mod[i/2]得到下一步的余数mod[i]
23             mod[i]=(mod[i/2]*10+i%2)%n;
24                      //mod[i/2]*10+i%2模拟了BFS的双入口搜索
25                      //当i为偶数时,+0,即取当前位数字为0  。为奇数时,则+1,即取当前位数字为1
26 
27         i--;
28         int pm=0;
29         while(i)
30         {
31             mod[pm++]=i%2;   //把*10操作转化为%2操作,逆向求倍数的每一位数字
32             i/=2;
33         }
34         while(pm)
35             cout<<mod[--pm];  //倒序输出
36         cout<<endl;
37     }
38     return 0;
39 }

转载至:http://blog.csdn.net/lyy289065406/article/details/6647917

posted @ 2015-01-27 20:56  天I火  阅读(388)  评论(0编辑  收藏  举报