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

Convert Decimal Number to Binary without using Array

我想制作一个 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);


    }
}
 

这个问题适合递归解决

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

我发现您的代码存在以下“直接”问题:

  1. 您没有反转最终数字。在手动转换 DEC->BIN 的方式中,我们反转最终的表示。提示:输入 11
  2. 为 Dry 运行
  3. 您正在做 num += rem; num *= 10。顺序错了。在添加余数之前,您应该先乘以它。例如。您的代码将为 5 输出 1010,而不是 101.
  4. 通过您的方法,您试图将十进制数表示为二进制表示形式 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());


    }
}

这是我第一次回答,所以如果有任何问题请告诉我:-)

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

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

二进制数中的位顺序是正确的,在前一个字符串前面添加,因此从右到左构建结果。
另外,我不会使用 Long(最后一行......数字),因为它限制了你的最大结果。但是如果你必须.....嗯