题目链接:
传送门
#include<cstdio>
#define ll long long
using namespace std;
ll d;
bool flag=0;
void dfs(ll num,int n) {
//flag记录是否搜索到,搜索到就退出。
if(flag==1||n>19)return;
if(num%d==0) {
printf("%lld\n",num);
flag=1;
return;
}
//往后两种情况
dfs(num*10,n+1);
dfs(num*10+1,n+1);
}
int main() {
while(scanf("%d",&d)) {
if(d==0)break;
flag=0;
dfs(1,1);
}
return 0;
}
这道题直接dfs做,每次判断该数是否为d的倍数,不是则进行10和10+1两种操作继续判断,最后输出结果(这个做法感觉有点取巧,数据再大一点就gg了)