原题地址

题意: 输入一个数,找到这个数的倍数,这个数字只能由1和0组成。

使用深搜,有两种递增方式,每次 n*10 或 n*10+1

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define closeio std::ios::sync_with_stdio(false)

ll n,flag;
 
void dfs(ll x,ll y)
{
	if(y>19||flag==1)        //long long 的最大数据范围为19
		return ;
	if(x%n==0)
	{
		flag=1;
		cout<<x<<endl;
		return ;
	}
	dfs(x*10,y+1);
	dfs(x*10+1,y+1);
}
 
int main()
{
	while(cin>>n&&n)
	{
		flag=0;
		dfs(1,1);
	}	
	return 0;
}