将Base 10转换为Binary

时间:2016-01-13 06:37:11

标签: java string binary stringbuilder

通过大量的试验和错误,我意识到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);

        }
    }

2 个答案:

答案 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)