你得到一个整数N.你能找到由最小值9和0组成的最小正整数X,这样,X是N的倍数吗?
我确实通过取N的每个倍数并检查它是否仅包含9和0来解决了这个问题。最近意识到有一些方法可以采取二元优势。不过不确定。你能告诉我逻辑吗?
答案 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, ... ]