例如,我需要获取一个未知数字,比方说3,并找到二进制(2 ^ 3) - 1次,从0到111(0-7)。显然,我需要的位数取决于2 ^ n中的数字'n'。
所以,如果数字为3,我需要输出为:
000
001
010
011
100
101
111
现在很明显我可以使用String.format(“%03d”,NumberInBinary)操作手动执行此操作,但这是对3位数进行硬编码。我需要使用未知位数的等效代码,我该怎么做? (如String.format(“%0nd”,yournumber),其中n是位数。)
答案 0 :(得分:5)
如果n = 4,则NumberInBinary = 101;
String.format("%0"+n+"d", NumberInBinary);
带输出
0101
答案 1 :(得分:1)
为什么不使用已经内置的Integer.toBinaryString()并只使用StringBuilder手动添加零?
public static void main(String[] args) {
int max = 5;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
String binary = Integer.toBinaryString(i);
if (binary.length() > max) {
break;
}
System.out.println( prefixWithZeros(binary, max) );
}
}
static String prefixWithZeros(String binary, int n) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n - binary.length(); i++) {
sb.append('0');
}
return sb.append(binary).toString();
}
答案 2 :(得分:0)
你可以使用递归:
public static void enumerate(String prefix, int remaining) {
if (remaining == 0) {
System.out.println(prefix);
} else {
enumerate(prefix + "0", remaining - 1);
enumerate(prefix + "1", remaining - 1);
}
}
然后拨打enumerate("", numberOfDigits);
更快,使用StringBuffer:
public static void enumerate(StringBuffer prefix, int remaining) {
if (remaining == 0) {
System.out.println(prefix.toString());
} else {
enumerate(prefix.append('0'), remaining - 1);
prefix.deleteCharAt(prefix.length() - 1);
enumerate(prefix.append('1'), remaining - 1);
prefix.deleteCharAt(prefix.length() - 1);
}
}
然后拨打enumerate(new StringBuffer(), numberOfDigits);