找到应该只包含9和0的数字的多个

时间:2015-02-01 03:40:42

标签: java binary numbers

你得到一个整数N.你能找到由最小值9和0组成的最小正整数X,这样,X是N的倍数吗?

我确实通过取N的每个倍数并检查它是否仅包含9和0来解决了这个问题。最近意识到有一些方法可以采取二元优势。不过不确定。你能告诉我逻辑吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我建议你一个简单的算法,以递增的顺序生成由0&9和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));

输出

   [0, 9, 90, 99, 900, 909, 990, 999, 9000, 9009, 9090, 9099, 9900, 9909, 9990, 9999, 90000, 90009, 90090, 90099, 90900, 90909, 90990, 90999, ... ]