0

我需要用 Java 做一个十进制到二进制的转换器。我不能使用 Integer.toBinaryString() 并且我看到的每个答案都使用它。我需要实际制作算法。我想将输入保留为 int,将输出保留为 String,因为如果我更改该程序的其余部分,这将变得一团糟。如果可以的话,保持它非常基本。这是我经过数小时的起草和报废后得到的结果,它有很多问题,比如它甚至没有组合一个二进制数。拜托,请帮助,我很困惑,我的大脑是一团糟。

public static String decToBin(int dec)
  {
    String bin = "";
    int exp = 0;

    for(int expLevel = 0; Math.pow(2, expLevel) <= dec; expLevel++)
    {
      if(dec - Math.pow(2, expLevel) >= 0)
      {
        dec -= Math.pow(2, expLevel-1);
      }
    }
    return bin;
  }
4

4 回答 4

0

看起来你需要复习你的数学笔记。这是基本算法的一个很好的解释:如何从十进制转换为二进制

如果您检查提供的链接,您会发现您只需要获得除以 2 的数字的其余部分。作为一个简短的算法:

int n <- user input (or other source)
String binaryForm <- empty string
while (n > 0) {
    int res <- n % 2;
    n <- n / 2;
    binaryForm <- res + binaryForm
}
于 2012-11-20T00:26:12.827 回答
0

两件相当明显的事情:

  • 声明后你没有改变bin任何地方(exp也没有使用)。
  • 中的条件if(dec - Math.pow(2, expLevel) >= 0)等价于循环不变量,因此始终为真。

这种方法可以工作,但循环必须走另一条路,即从 2 的较高幂到较低的幂(这意味着您首先必须找到小于输入的 2 的最高幂,除非您是前导零很好)。此外,它可能有助于避免重新分配方法参数 ( dec)。

于 2012-11-20T00:26:24.183 回答
0

您可以将参数移动 1 位并将其添加到字符串中。最后,您可以将其反转,如下所示:

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(decToBin(0));
        System.out.println(decToBin(1));
        System.out.println(decToBin(2));
        System.out.println(decToBin(127));
    }

    public static String decToBin(int dec) {
        if (dec == 0) {
            return "0"; // special case
        }

        final StringBuilder result = new StringBuilder();
        int current = dec;

        while (current != 0) {
            result.append(current & 0x1);
            current = current >> 1;
        }

        return result.reverse().toString();
    }
}

和一个小提琴。但它适用于正整数。

于 2012-11-20T00:27:24.337 回答
-1
import java.util.Scanner;

public class DecimalToBinary {

public String toBinary(int n) {
   if (n == 0) {
       return "0";
   }
   String binary = "";
   while (n > 0) {
       int rem = n % 2;
       binary = rem + binary;
       n = n / 2;
   }
   return binary;
}

public static void main(String[] args) {
   Scanner scanner = new Scanner(System.in);
   System.out.print("Enter a number: ");
   int decimal = scanner.nextInt();
   DecimalToBinary decimalToBinary = new DecimalToBinary();
   String binary = decimalToBinary.toBinary(decimal);
   System.out.println("The binary representation is " + binary);

}
}
于 2015-09-28T05:56:23.513 回答