1

のような 10 進数の値が 1 つ65あり、この値を 2 倍の形式で除算したいと考えています。

たとえば、次のタイプ ルールがあります。

ここに画像の説明を入力

10 進数として取得する場合は42、最初に割りたいと思い42 number in format of 2 raised toます。次に、次のように、その電力のみを出力します。

OutPut : 1,3,5

ここに画像の説明を入力

たとえば、10 進数として 65 がある場合、6,0(2 の 6 への累乗) + (2 の 0 への累乗) = 65 であるため、その出力として必要です。

ありがとう

Javaでこれを達成する方法を誰でも助けてくれます。

4

4 に答える 4

4

最下位ビットを繰り返し比較し、カウントしながらカウントし、数値を右シフトして各ビットを順番に調べることができます。

int n = 65
int d = 0;
while (n > 0) {
    if ((n & 1) == 1) {  // check LSB
        System.out.println(d);
    }
    n >>>= 1;  // shift right
    ++d;       // inc digit count
}
于 2012-10-18T11:27:42.730 に答える
2
Integer.toString(65, 2);

次の出力を行います。

1000001

次に、文字列に取り組みます。

于 2012-10-18T11:24:30.637 に答える
1

これは改善することができますが、私はそれが仕事をするだろうと思います。

int n = 42;
    String binary = Integer.toBinaryString(n);
    for(int i = binary.length() - 1; i >= 0; i--){
        if(binary.charAt(i) == '1')
            System.out.print(i+1);      
    }
于 2012-10-18T11:25:08.227 に答える
1

アルゴリズムは次のとおりです。

  1. 指定された数 x=log(2, input) の底が 2 の対数を見つけます
  2. 結果の床と天井を見つける y = floor(x), z=ceiling(x)
  3. 2^y、2^z を見つけて、入力に近い方を選択します。
  4. diff = (input - 2^(x or y)) を計算し、dif=0 になるまで再帰的に diff に対して同じことを行います。
于 2012-10-18T11:27:26.757 に答える