题目链接:【POJ 1426】
输入n(1<=n<=200),输出一个数m,只能由0跟1组成,且能被n整除
深搜m,m的初始值是1,对于每一个m都朝两个方向找,一个是m*10,另一个是m*10+1
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
#define ll __int64
int n;
ll ans;
void dfsans(ll x, int len)
{
if(x%n==0)
{
ans = x;
return;
}
if(len>=19) return;
dfsans(x*10, len+1);
if(ans!=-1) return;
dfsans(x*10+1, len+1);
if(ans!=-1) return;
}
int main()
{
while(~scanf("%d", &n))
{
if(n==0) break;
ans = -1;
dfsans(1, 1);
printf("%I64d\n", ans);
}
return 0;
}