题目大意:输入一个1~200的数n,输出一个只由0和1组成,并且它被n整除。

解题思路:dfs,两个参数,一个参数为进入的层数,因为超过19层unsigned long long装不下,会爆炸。另一个参数为,这个数是否被整除。第一层用1判断是否整除,之后乘十,乘十加一。fin判断是否找到。

ac代码:

#include <iostream>
using namespace std;
typedef unsigned long long ull;
int n, fin;
void dfs(ull k, int cen)
{
if (fin || cen > 19)
return ;
if (k % n == 0){
printf("%I64u\n", k);
fin = 1;
return ;
}
dfs(k*10, cen+1);
dfs(k*10 + 1, cen+1);
}
int main()
{
while (scanf("%d", &n)!=EOF && n)
fin = 0, dfs(1, 1);
return 0;
}