POJ 1426 Find The Multiple

题意:给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。

思路:直接深搜。网上还有DFS+同余模定理

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <sstream>
 5 #include <algorithm>
 6 #include <list>
 7 #include <map>
 8 #include <vector>
 9 #include <queue>
10 #include <stack>
11 #include <cmath>
12 #include <cstdlib>
13 //#include <memory.h>
14 #define clc(a,b) memset(a,b,sizeof(a))
15 using namespace std;
16 const int maxn=100000;
17 const int inf=0x3f3f3f3f;
18 bool flag;
19 void dfs(unsigned __int64 t,int n,int k){
20     if(flag)
21         return;
22     if(t%n==0){
23         printf("%I64u\n",t);
24         flag=true;
25         return;
26     }
27     if(k==19)
28         return;
29     dfs(t*10,n,k+1);
30     dfs(t*10+1,n,k+1);
31 }
32 int main(){
33     int n;
34     while(cin>>n&&n){
35          flag=false;
36          dfs(1,n,0);//1表示n的倍数,0表示搜索深度。应为unsigned __int64 最多19层
37     }
38     return 0;
39 }
View Code

 

posted @ 2016-04-07 23:29  yyblues  阅读(173)  评论(0编辑  收藏  举报