POJ

来源:互联网 发布:网络十大丑男杀马特图 编辑:程序博客网 时间:2024/06/15 01:40
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


刚开始看这题的时候,竟是一脸懵逼,还以为是二进制转化,找啥规律的,可谁知最经竟然是一个简单的搜索题,用深搜(dfs)几行的代码就解决了。题上求的是找一个能够整除n的数,而这个数只能由0和1组成,当然,值得注意的是,这题的答案还是很多种的,刚开始我做的时候,运行结果一直和题上给的数据不一样,还真以为自己给写错了,都不敢提交,后来提交后出现个Accpet,别说有多激动了。两个搜索 dfs(x*10;step+1)  dfs(x*10+1;step+1);


long long的最大值:9223372036854775807(>10^18)  总共是19位,所以深搜的时候,最多只搜19次就结束了了

long long的最小值:-9223372036854775808  
unsigned long long的最大值:18446744073709551615

__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

看看这题,只想说水平有待提高,一起努力吧
#include<stdio.h>int f,n;void dfs(long long int m,int step){    if(f || step >= 19)        return ;    if(m%n == 0)    {        f = 1;        printf("%lld\n",m);        return ;    }    dfs(m*10,step+1);    dfs(m*10+1,step+1);}int main(){    while(~scanf("%d",&n) && n)    {        f = 0;        dfs(1,0);    }    return 0;}

原创粉丝点击