0

Java で 10 進数から 2 進数へのコンバーターを作成する必要があります。私は Integer.toBinaryString() を使用できません。私が見たすべての回答はそれを使用しています。実際にアルゴリズムを作る必要があります。入力を int に、出力を String に保持したいのは、プログラムの残りの部分を変更すると、これが台無しになるからです。できれば、かなり基本的なものにしてください。これは私が何時間にもわたる下書きとスクラップの後にたどり着いたものであり、2進数をまとめることさえできないなど、多くの問題があります。助けてください、私はとても混乱していて、頭が混乱しています。

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

数学のノートを見直す必要があるようです。基本的なアルゴリズムの適切な説明は次のとおりです: 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
}
于 2012-11-20T00:26:12.827 に答える
0

2つのかなり明白なこと:

  • bin宣言後、どこにも変更していません(また、expどちらも使用されていません)。
  • の条件if(dec - Math.pow(2, expLevel) >= 0)はループ不変条件と同等であるため、常に true です。

このアプローチを機能させることはできますが、ループは逆方向、つまり 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 に答える