给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。
//题目说100位,实际上unsigned __int64即可
#include <stdio.h>
#include <stdlib.h>
int flag;
void dfs(unsigned __int64 sum,int n,int location)//n为原数,sum为当前加到的数,location为当前位数
{
if(flag)//已找到sum
return;
if(location>20)//超出unsigned __int64范围
return;
if(sum%n==0){
printf("%I64u\n",sum);
flag=1;
return;
}
dfs(sum*10,n,location+1);
dfs(sum*10+1,n,location+1);
return;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n){
flag=0;
dfs(1,n,1);
}
return 0;
}
//后来写的:
#include <cstdio>
#include <iostream>
using namespace std;
int dfs(int n,unsigned long long sum,int step){
if(step > 20){
return 0;
}
if(sum % n == 0){
printf("%llu\n",sum);
return 1;
}
int flag = dfs(n,sum * 10,step + 1);
return flag?1:dfs(n,sum * 10 + 1,step + 1);
}
int main(){
int n;
while(scanf("%d",&n)!=EOF && n){
dfs(n,1,1);
}
return 0;
}