首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找可写为1和0的数字的倍数

查找可写为1和0的数字的倍数
EN

Stack Overflow用户
提问于 2011-10-25 05:25:35
回答 3查看 630关注 0票数 3

给定数字n (2 <= n <= 1000),找出其中最小的非零倍数,其以10为基数,只有数字0和1。示例:2个-> 10、3个-> 111、4个-> 100、7个-> 1001、11个-> 11、9个-> 111 111 111。

我的想法不是很好:{/* n|2 -> n|5 +“000”(最大幻觉(2,5))-> n|3 + "111“*/}

我认为,遵循剩余的数字除法由数字n组成,格式为0/1。谢谢您的帮助!

EN

回答 3

Stack Overflow用户

发布于 2011-10-25 05:46:25

您可以使用breadth first search。首先查询1,因为您的数字必须以1开头,然后每次从队列中提取一个数字x时,查看它是否是n的倍数。如果是,您就得到了答案;如果不是,请按顺序在队列中插入x * 10x * 10 + 1

请注意,实际上不必将除法s和0s的整个字符串存储在队列中:存储除法的剩余部分和一些辅助信息就足够了,这些信息使您可以重新构造实际的字符串。如果你需要更多关于这方面的细节,请回信。

票数 5
EN

Stack Overflow用户

发布于 2011-10-25 21:54:42

非暴力方法是遍历仅包含0和1的一系列数字,然后确定该数字是否为所讨论数字的倍数。这种方法比遍历n的倍数并确定它是否只包含01的效率要高得多。

IVlad's suggestion是生成序列(只包含01的数字)的更有效的方法。但是,如果您更喜欢动态生成数字(队列没有内存开销),则可以简单地迭代整数(或使用循环索引),并将每个值的二进制表示解释为十进制数。

代码语言:javascript
复制
2 (Decimal) ->  10 (Binary) -> (interpret as decimal 10)
3 (Decimal) ->  11 (Binary) -> (interpret as decimal 11)
4 (Decimal) -> 100 (Binary) -> (interpret as decimal 100)
5 (Decimal) -> 101 (Binary) -> (interpret as decimal 101)
... and so on.

对于转换,我怀疑可以通过链接对Integer.toBinaryString()String.parseInt()的调用来完成,但很可能有更有效的方法来实现。

这里有一个在线演示,可以帮助您入门:http://jsfiddle.net/6j5De/4/

票数 0
EN

Stack Overflow用户

发布于 2014-11-28 01:26:20

代码语言:javascript
复制
public static int result(int num)
{
    int i =2;
    while(true)
    {
        int mult = Integer.parseInt(Integer.toString(i++,2));
        if( mult % num == 0) //Check whether it is a multipler of given number or not ?
        {
            return mult;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7882190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档