问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
import java.math.BigInteger;
public class t1 {
public static void main(String[] args) {
BigInteger binaryNumber = BigInteger.ZERO;
System.out.println(formatBinary(binaryNumber,5));
for (int i = 0; i < 31; i++) {
binaryNumber = binaryNumber.add(BigInteger.ONE);
System.out.println(formatBinary(binaryNumber,5));
}
}
private static String formatBinary(BigInteger number, int length) {
String binaryString = number.toString(2);
return String.format("%" + length + "s", binaryString).replace(' ', '0');
}
}
binaryNumber = binaryNumber.add(BigInteger.ONE);
首先,BigInteger
是 Java 中用于表示任意精度整数的类,它可以处理比原生数据类型(如 int
或 long
)支持的范围更大的整数。
BigInteger.ONE
是 BigInteger
类的一个静态成员,表示值为 1 的大整数。在这里,我们将 binaryNumber
这个 BigInteger
对象与 BigInteger.ONE
相加,实现了在二进制数的基础上加1。
在 Java 中,BigInteger
类提供了 add
方法,用于将当前 BigInteger
对象与另一个 BigInteger
对象相加,产生一个新的 BigInteger
对象,而不修改原始对象。因此,binaryNumber.add(BigInteger.ONE)
返回的是一个新的 BigInteger
对象,表示 binaryNumber
加上 1。
这个操作在二进制中对应于将当前的二进制数加1。例如,如果 binaryNumber
表示的是二进制数 1010
,那么经过 binaryNumber = binaryNumber.add(BigInteger.ONE);
后,binaryNumber
将表示二进制数 1011
。
String.format
是 Java 中用于格式化字符串的方法之一。它的基本语法如下:
String formattedString = String.format(format, args);
其中,format
是一个包含格式说明符的字符串,而 args
是要格式化的参数。格式说明符指定了参数的显示方式,可以包含常规字符和特殊的格式化标志。
以下是一些常见的格式说明符:
%s
: 字符串%d
: 十进制整数%f
: 浮点数%b
: 布尔值%c
: 字符%x
,%X
: 十六进制整数%o
: 八进制整数
使用 %s
来表示字符串,并使用 String.format("%" + length + "s", binaryString)
来确保字符串的长度为指定位数。
具体来说,%
后面的 length
是一个表示输出字段宽度的数字。如果实际字符串长度小于这个宽度,将在左侧用空格填充。通过这种方式,我们可以确保输出的二进制字符串总是有固定的位数,不足的地方用零进行填充。
代码中,String.format("%" + length + "s", binaryString).replace(' ', '0')
部分将可能的左侧空格替换为零,以确保输出的字符串是八位长度。