不使用数组将十进制数转换为二进制数
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);
}
我发现您的代码存在以下“直接”问题:
- 您没有反转最终数字。在手动转换 DEC->BIN 的方式中,我们反转最终的表示。提示:输入 11
为 Dry 运行
- 您正在做
num += rem; num *= 10
。顺序错了。在添加余数之前,您应该先乘以它。例如。您的代码将为 5
输出 1010
,而不是 101
.
- 通过您的方法,您试图将十进制数表示为二进制表示形式
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(最后一行......数字),因为它限制了你的最大结果。但是如果你必须.....嗯
我想制作一个 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);
}
我发现您的代码存在以下“直接”问题:
- 您没有反转最终数字。在手动转换 DEC->BIN 的方式中,我们反转最终的表示。提示:输入 11 为 Dry 运行
- 您正在做
num += rem; num *= 10
。顺序错了。在添加余数之前,您应该先乘以它。例如。您的代码将为5
输出1010
,而不是101
. - 通过您的方法,您试图将十进制数表示为二进制表示形式
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(最后一行......数字),因为它限制了你的最大结果。但是如果你必须.....嗯