Java 查找只应包含9和0的数字的倍数

Java 查找只应包含9和0的数字的倍数,java,binary,numbers,Java,Binary,Numbers,给你一个整数N。你能找到只由9和0组成的最小正整数X吗,这样,X是N的倍数 我通过取N的每一个倍数并检查它是否只包含9和0来解决这个问题。后来意识到有某种方式可以利用二进制优势。不过我不确定。你能帮我讲一下逻辑吗 另一种方法是系统地迭代由9和0组成的数字,并检查N是否是一个因子 提示:9和0组成的字符串可以编码为二进制数,“9”的每一位为1,“0”的每一位为0 数论也有可能是数学!将提供一些捷径,但这超出了StackOverflow的范围。我建议您使用一个简单的算法,以递增顺序生成由0和9组成的

给你一个整数N。你能找到只由9和0组成的最小正整数X吗,这样,X是N的倍数


我通过取N的每一个倍数并检查它是否只包含9和0来解决这个问题。后来意识到有某种方式可以利用二进制优势。不过我不确定。你能帮我讲一下逻辑吗

另一种方法是系统地迭代由9和0组成的数字,并检查N是否是一个因子

提示:9和0组成的字符串可以编码为二进制数,“9”的每一位为1,“0”的每一位为0


数论也有可能是数学!将提供一些捷径,但这超出了StackOverflow的范围。

我建议您使用一个简单的算法,以递增顺序生成由0和9组成的数字

long[] series    = new long[1000];
series[1]        = 9;

int offset       = 1;
long base        = series[1];
int lastAllNines = 1;

for (int i=2 ; i<series.length ; i++) {
    if (offset == lastAllNines) {
        series[i]    = (series[i-1] + 1)*9;
        base         = series[i];
        offset       = 0;
        lastAllNines = i - 1;
    } else 
        series[i]    = base + series[1 + offset++];
}
System.out.println(Arrays.toString(series));

谢谢你,兄弟。这很有帮助。嗯,这是错误的。输出中的990在哪里?David T的评论试图编辑我的答案:看这篇文章的输出,我注意到一些我认为应该存在的数字缺失:990 9090 9900 9909 9990等等。缺失的数字似乎有一些规律,很多90,但我对代码的研究还不够深入,看不出“错误”在哪里。当然,我可能会误解输出或其他内容,但由于此编辑建议将在发布前得到同行评审,因此如果我遗漏了什么内容,任何人都可以随意忽略或更正。@Dici-事实上,不要。OP要求提供逻辑。。。这不是解决办法。关键是他会通过自己解决细节学到更多。@StephenC我会自己解决,因为我可以看出我已经简化了很多问题。我错过了所有的9*9*0*
   [0, 9, 90, 99, 900, 909, 990, 999, 9000, 9009, 9090, 9099, 9900, 9909, 9990, 9999, 90000, 90009, 90090, 90099, 90900, 90909, 90990, 90999, ... ]