POJ - 1426 Find The Multiple

本文介绍了一道编程题目,要求找出一个由0和1组成的数,该数为给定正整数n的倍数。通过使用深度优先搜索(DFS),文章提供了一个简洁高效的解决方案,并分享了实现过程中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值