2016-01-13 144 views
1

通过大量的试验和错误,我意识到k不能增加到输出二进制的长度值。所以在这个代码的情况下,k被设置为增加到小于4的一个,所以我只能测试8到15,因为它们的值在二进制中的长度不超过四个。将基数10转换为二进制

此外,值向后打印出来。任何想法如何解决这两个错误? 当我试图使用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); 

     } 
    } 

回答

1

使用k您实际上定义了您将分割数字a的次数。由于您需要划分直到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)

+0

重复从这里回答:http://stackoverflow.com/questions/16008685/base-10-to-base-2-8-16 -conversion-in-java –

+3

问题是:“关于如何解决这两个错误的任何想法?”。这不是“是否还有一个库函数与我正在编写的用于学习Java的代码相同”。 –

+0

@ErwinBolwidt,对不起,我忽略了。现在答案应该没问题。 – MASh

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.