Find The Multiple (DFS递归)

题意:输入一个不超过200的数 n,然后求得一个数字k,数字满足:能被n整除,每一位只有0,1。这样的数字k会有很多个,然以输出一个就可以。

 注意unsigned __int64的范围,-(10^19)~(10^20)所以步数不能超过19次。 (摘)

 

附:同余模定理:

(a*b)%n = (a%n *b%n)%n;

(a+b)%n = (a%n +b%n)%n;

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 
 8 int n,flag;
 9 
10 void DFS(int step,long long num)
11 {
12     if(step==19 || flag) return; //64位 最多加19步
13     if(num%n==0)
14     {
15         cout<<num<<endl;
16         flag=1;   //如果得到一个数了,就可以全退出
17         return;
18     }
19     DFS(step+1,num*10);
20     DFS(step+1,num*10+1);
21 }
22 
23 int main()
24 {
25     ios::sync_with_stdio(false);
26     while(cin>>n && n!=0)
27     {
28         flag=0;
29         DFS(0,1);
30     }
31 }

 

posted @ 2018-03-04 16:42  木流牛马  阅读(230)  评论(0编辑  收藏  举报