Find The Multiple
Description
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 Source |
提示
题意:
给你一个正整数n,求出只有“1”,“0”,组成的十进制数m,且m%n==0,如有多个输出一个即可。
思路:
递推的公式为从1开始
a=1*10=10
b=1*10+1=11
c=a*10=100
d=a*10+1=101
e=b*10=110
f=b*10+1=111
......
之后用BFS去搜就行了。long long够用,不用担心会有超long long范围的数据,还要注意队列的最大上限。
示例程序
Source Code
Problem: 1426 Code Length: 444B
Memory: 8604K Time: 141MS
Language: GCC Result: Accepted
#include <stdio.h>
long long q[1048571]; //上限比较大,放外面吧
long long bfs(int x)
{
int f=0,top=0;
q[top]=1;
top++;
while(f<top)
{
if(q[f]%x==0)
{
return q[f];
}
q[top]=q[f]*10;
top++;
q[top]=q[f]*10+1;
top++;
f++;
}
}
int main()
{
int n;
scanf("%d",&n);
while(n!=0)
{
printf("%lld\n",bfs(n));
scanf("%d",&n);
}
return 0;
}