Find The Multiple
Time Limit: 1000MS | Memory Limit: 10000K | |||
Total Submissions: 18823 | Accepted: 7618 | Special Judge |
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
题目链接:http://poj.org/problem?id=1426
题目大意:给一个数n,求其只含有数字0或1的倍数,输出任意可行解
题目分析:DFS,题目说的no more than 100是吓人的,开始以为是大数,其实long long就可以,本题打表也可以;搜索思路:
从1开始判断是否为n的倍数,然后乘10或者乘10加1,找到一个退出即可,因为题目数据范围是1-200,因此搜索深度通过打表决定,深度要求不超过long long范围且对1-200都有解,最后发现18即可。
#include <cstdio>
#define ll long long
ll n, ans;
bool find;
void DFS(ll num, int deep)
{
if(deep > 18 || find)
return;
if(num % n == 0)
{
find = true;
ans = num;
return;
}
DFS(num * 10, deep + 1);
DFS(num * 10 + 1, deep + 1);
}
int main()
{
//for(int i = 1; i < 201; i++)
while(scanf("%lld", &n) != EOF && n)
{
// n = i;
ans = 0;
find = false;
DFS(1, 0);
printf("%lld\n", ans);
}
}