我需要在Java中创建一个十进制到二进制转换器。我不能使用Integer.toBinaryString(),我见过的每个答案都使用它。我需要实际制作算法。我想保持输入一个int和输出一个字符串,因为如果我改变那个程序的其余部分来自搞砸了。如果可以,请保持基本。这是我在经过数小时的绘图和报废后最终得到的结果,并且它有很多问题,比如它甚至没有将二进制数组合在一起。请帮助,我很困惑,我的大脑一团糟。
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;
}
答案 0 :(得分:0)
您似乎需要查看数学笔记。以下是基本算法的一个很好的解释:How to Convert from Decimal to Binary。
如果你检查提供的链接,你会发现你只需要将数字的其余部分除以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
}
答案 1 :(得分:0)
两个相当明显的事情:
bin
(并且未使用exp
。)if(dec - Math.pow(2, expLevel) >= 0)
中的条件等同于循环不变量,因此始终为真。这种方法可以起作用,但循环必须走另一条路,即从2的较高功率到较低的功率(这意味着你首先必须找到比输入小的2的最大功率,除非你对领先零点罚款。此外,它可能有助于避免重新分配方法参数(dec
)。
答案 2 :(得分: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();
}
}
还有一个fiddle。 它适用于正整数。
答案 3 :(得分:-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);
}
}