POJ - 1426 Find The Multiple

Posted shiyu-coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ - 1426 Find The Multiple相关的知识,希望对你有一定的参考价值。

题目:

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.

Input

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.

Output

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.

Sample Input

2
6
19
0

Sample Output

10
100100100100100100
111111111111111111

这道题看似麻烦,实际上直接暴力搜索就行了。。。
利用状态压缩搜索2^20以内的所有二进制数(之所以次数是20,是因为再大一些就超过long long的范围而
溢出了,实际上这个范围已经很多余了,很小的数就能满足条件),然后每个都换成二进制表示,这个二进制
表示直接当作十进制数就是m,然后检测每一个m是否符合要求,找到符合要求的输出就行了。
代码:
 1 #include<iostream>
 2 using namespace std;
 3 int line[100]={0}; //倍数不会大于100
 4 const int LEN=20;
 5 
 6 int main(){
 7     int n=0;
 8 
 9     cin >>n;
10     while(n!=0){
11         //状态压缩
12         for(long long i=1;i<(2<<LEN);i++){
13             for(int j=0;j<LEN;j++){
14                 line[j]=(i>>j)&1;
15             }
16             int len=LEN-1; //m的长度
17             while(line[len]==0&&len>=0){
18                 len--; //找到m的长度
19             }
20             long long m=0;
21             for(int j=len;j>=0;j--){
22                 m=m*10+line[j]; //计算m
23             }
24             //检查m是不是n的倍数
25             if(m%n==0){
26                 cout <<m<<endl;
27                 break;
28             }
29         }
30         cin >>n;
31     }
32 
33     system("pause");
34     return 0;
35 }

 

以上是关于POJ - 1426 Find The Multiple的主要内容,如果未能解决你的问题,请参考以下文章

广搜+打表 POJ 1426 Find The Multiple

POJ - 1426 Find The Multiple

搜索POJ1426:Find The Multiple

POJ 1426 - Find The Multiple - [DP][BFS]

[题解] [BFS] POJ 1426 - Find The Multiple

POJ1426 Find The Multiple