我想制作一個將輸入的任何十進制數轉換為二進制數的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);
}
}
uj5u.com熱心網友回復:
我發現您的代碼存在以下“直接”問題:
- 您沒有顛倒最終數字。在轉換 DEC->BIN 的手動方式中,我們反轉最終表示。提示:輸入 11 的空運行
- 你在做
num = rem; num *= 10
。順序是錯誤的。在添加余數之前,您應該乘以它。例如。您的代碼將輸出1010
,5
而不是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());
}
}
uj5u.com熱心網友回復:
這個問題適合遞回解決方案
private static int DecToBin(final int input, final int result) {
if (input == 0) {
return result;
}
return DecToBin(input / 2, result * 10 input % 2);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/446393.html
上一篇:使用迭代廣度優先搜索求解數獨