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 }