[英]Decimal to Binary Converter in Java
我需要在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;
}
看来您需要复习数学笔记。 这是基本算法的一个很好的解释: 如何从Decimal转换为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
}
两件很明显的事情:
bin
(并且也不使用exp
)。 if(dec - Math.pow(2, expLevel) >= 0)
中的条件等效于循环不变式,因此始终为true。 可以使这种方法起作用,但是循环必须走另一条路,即从较高的2的幂到较低的幂(这意味着您必须首先找到比输入小2的最大幂,除非您是可以加上前导零)。 同样,这可能有助于避免重新分配方法参数( dec
)。
您可以将参数移动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();
}
}
和一个小提琴 。 它适用于正整数。
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.