Find The Multiple (深搜(。。。水))

题目来源:https://vjudge.net/contest/159739#problem/E
【题意】
找一个不超过100位的由0和1组成的十进制数字并且是不大于200的n的倍数的m。。。(有点绕)
【思路】
想了一会,想到了取余。决定用数组模拟,也就是数组里只有1,其他都是-1,然后接着,开始选0和1,也就是令ans=1,有两个选择,ans*10+1,另一个是ans乘10,然后取余。。。一旦超过100位,就return;然后,我错了。。。这个数组可以用long long 代替,。。。理由是19位0和1组成的数字哦,对谁都可以除尽。。。所以直接开一个long long型变量,存一下就好了。。。
【代码】

#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
int n,flag,t;
void dfs(LL ans,int l)
{
    if(ans%n==0)
    {
        flag=1;
        printf("%lld\n",ans);
        return ;
    }
    if(l==19) return ;
    dfs(ans*10+1,l+1);
    if(flag) return;
    dfs(ans*10,l+1);
}
int main()
{
    while(~scanf("%d",&n)&&n)
    {
        flag=0,t=1;
        dfs(1,1);
    }
}

你可能感兴趣的:(ACM竞赛,【搜索】--深搜,ACM的进程)