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
解题思路:
本题是要求你输入一个正整数,输入0结束,要求你找出只包含0或1结尾的且能被你输入的那个数整除的数。要求是不超过100位数字,但是根据题目的范围(1--100)来说的话,是没有超过long long的。我们可以用dfs及bfs来求解。结尾只能包含0或1,那么要么就是x*10要么就是x*10+1。
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n;
bool bfs(int step,long long x)
{
queue<long long>que;
que.push(x);
if(step==18)return false ;//超过long long了就不看了
while(!que.empty())
{
long long x1=que.front();
que.pop();
if(x1%n==0)
{
cout<<x1<<endl;
return true;
}
que.push(x1*10);
que.push(x1*10+1);
}
}
int main()
{
while(cin>>n)
{
if(n==0)break;
bfs(0,1);
}
return 0;
}
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n;
bool flag;
void dfs(int step,long long x)
{
if(step>19||flag)return ;
if(x%n==0)
{ flag=true;
cout<<x<<endl;
return ;
}
dfs(step+1,x*10);
dfs(step+1,x*10+1);
}
int main()
{
while(cin>>n)
{
flag=false;
if(n==0)break;
dfs(1,1);
}
return 0;
}