Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.
The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.
For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.
2
6
19
0
10 100100100100100100111111111111111111
题意:
给定一个不超过200的正整数n,编写一个程序,求一个满足只包含0和1的十进制数(不超100位)能整除n,输入0时程序结束。
解题思路:
题意翻译明白后,应该想到用搜索,用深搜。从1开始,判断能否整除n,可以的话输出,深搜结束,不可以就继续搜,只是每次搜都有两种情况,要么本身乘以十,要么本身乘以十再加一,这样就可以做到把包含0和1组合的十进制数遍历一遍。
注意:
long long型足以存下满足要求的数,应该是long long型范围内必定存在一个能整除1-200的只包含0和1的十进制数吧,另外特别注意不需要求满足题意的最小数,只要满足要求即可输出。
AC代码:
#include<stdio.h> long long int sum; //搜索函数和主函数都需要用 int n, flag; //所以定义为全局变量 void dfs( long long x, int step ) { if( flag || step > 18 ) //如果找到满足题意的或者 return ; //超出long long型 返回 if( x%n == 0 && x ) { flag = 1; //flag找到就标记 printf("%lld\n",x); return ; } dfs(x*10,step+1); dfs(x*10+1,step+1); } int main() { while( scanf("%d",&n) && n ) { flag = 0; dfs(1,0); } return 0; }