POJ1426Find The Multiple

 题解:首先一串数字第一位数字肯定是1开头 不可能是0开头,然后增加的状态有两种,一个是在后面+1,一个是+0

所以*10,*10+1;

dfs的深度为20层

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int flag;//深搜结束的标志
long long m;
void dfs(long long t,int k)
{
if(flag)return;
if(k==19)return;
if(t%n==0)
{   flag=1;
    m=t;
    return;
}
dfs(10*t,k+1);
dfs(10*t+1,k+1);
}
int main()
{
    while(cin>>n&&n)
    {flag=0;//没有找到目标节点
      dfs(1,0);//从1开始的深搜
    printf("%lld\n",m);
    }
}

 

Guess you like

Origin blog.csdn.net/xxf_is_girl_gad/article/details/90416787