不使用数组将十进制数转换为二进制数



我想制作一个java代码,将输入的任何十进制数转换为二进制数。尽管数组方法很简单,但它实际上并没有打印数字(它打印数组(,也似乎没有正确使用我们手动使用的算法。所以我试着在没有数组的情况下完成它。问题是它有时给出正确的答案,有时给出错误的答案。我认为问题可能是在循环的最后一个循环中乘以零,但我不确定。我作为注释编写的代码是解决问题的失败尝试。

import java.util.Scanner;
public class DecToBin {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long dec = 0, num = 0, rem = 0;

System.out.print("Enter A Decimal Number: ");
dec = sc.nextLong();
while(dec > 0){
rem = dec % 2;
num += rem;
num *= 10;
dec /= 2;
}
// if(num % 100 == 10){
//     num = num/10;
// }
System.out.println("Binary Equivalent: " + num);

}
}

这是我第一次回答,所以如果有什么问题,请告诉我:-(

您可以尝试使用字符串作为中间值。简短而简单。。。。但我不知道这是否算作数组:-(
你的while部分应该是这样的:

String strBin = "";
while(dec > 0){
strBin = String.valueOf(dec%2) + strBin;
dec /= 2;
}
num = Long.valueOf(strBin);        

二进制数中的位顺序是正确的,可以在前一个String前面添加,因此从右到左构建结果
此外,我不会使用Long(最后一行…num(,因为它限制了您的最大结果。但如果你必须。。。。。meh

我发现;直接的";代码问题:

  1. 您没有颠倒最终数字。在转换DEC->BIN,我们推翻最终陈述。提示:输入11的空运行
  2. 您正在执行num += rem; num *= 10。顺序不对。你应该先把它相乘,然后再加余数。例如,您的代码将为5输出1010,而不是101
  3. 通过您的方法,您试图将十进制数表示为其二进制表示形式int,这将您的输入限制为2047,因为2048及以上版本的二进制表示形式需要11位以上的数字,而在int中无法实现这一点。如果您不想使用数组,则应该使用String。此外,倒车会更容易

类似于:

import java.util.Scanner;
public class DecToBin {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int dec = 0, num = 0;

System.out.print("Enter A Decimal Number: ");
dec = sc.nextInt();
String bi = "";
while(dec > 0){
int rem = dec % 2;
// num *= 10;
// num += rem;
bi += Character.toString(rem + 48);
dec /= 2;
}
// if(num % 100 == 10){
//     num = num/10;
// }
System.out.println("Binary Equivalent: " + new StringBuilder(bi).reverse().toString());

}
}

这个问题本身适用于递归解决方案

private static int DecToBin(final int input, final int result) {
if (input == 0) {
return result;
}
return DecToBin(input / 2, result * 10 + input % 2);
}