通过大量的试验和错误,我意识到k
不能递增到输出二进制的长度值。因此,对于此代码,k
设置为增加到小于4 (k < 4)
,因此我只能测试8到15,因为它们的二进制值长度不超过4。
此外,值向后打印。有关如何解决这两个错误的任何想法?
评论的行是我尝试使用StringBuilder
时但没有成功的。
Scanner scan = new Scanner(System.in);
int num = 0;
int test = scan.nextInt();
//StringBuilder sb = new StringBuilder();
for(int i = 0; i < test ; i++) {
int a = scan.nextInt();
for( int k = 0; k < 4; k++ )
{
num = a / 2;
int remainder = a % 2;
//String noodle = Integer.toString(remainder);
a = num;
//sb.append(noodle);
//System.out.print(sb);
System.out.println(remainder);
}
}
答案 0 :(得分:2)
如果您希望算法执行此操作,请执行以下操作:
StringBuilder result = new StringBuilder();
while(num > 0) {
int r = num % 2;
num /= 2;
result.append(r.toString());
}
System.out.println(result.reverse().toString());
它基本上与你的相同,但一直持续到num
= 0。
答案 1 :(得分:1)
使用k实际上定义了将数字a除以的次数。由于您需要划分直到变为0,因此您可以使用a>0
代替k<4
。
for( int k = 0; a > 0; k++ )
{
num = a / 2;
int remainder = a % 2;
//String noodle = Integer.toString(remainder);
a = num;
//sb.append(noodle);
//System.out.print(sb);
System.out.println(remainder);
}
顺便说一下,对于十进制(10个基数)数字,二进制表示将是
Integer.toString(x, 2)
。
除此之外,对于八进制和十六进制表示:
Integer.toString(x, 8)
Integer.toString(x, 16)