トピック
テキスト
すべての非負の整数Nには、その2進表現があります。たとえば、5はバイナリ「101」として表すことができ、11はバイナリ「1011」として表すことができます。N = 0を除いて、バイナリ表現には先行ゼロがないことに注意してください。
2進数の1の補数は、各1が0に変更され、各0が1に変更されることを意味します。たとえば、2進数「101」の2進数の補数は「010」です。
10進数Nを指定します。そのバイナリ表現の補数に対応する10進数の整数を返します。
例1:
入力:5
出力:2
説明:5の2進表現は「101」であり、その2進補数は「010」であり、10進数で2です。
例2:
入力:7
出力:0
説明:7の2進表現は「111」であり、その2進補数は「000」であり、10進数で0です。
例3:
入力:10
出力:5
説明:10の2進表現は「1010」であり、その2進補数は「0101」であり、10進数で5です。
促す:
0 <= N < 10^9
本题与 476:https://leetcode-cn.com/problems/number-complement/ 相同
ソース:LeetCode
テンプレート
int bitwiseComplement(int N){
}
問題解決
分析
問題を理解した後、巧妙な解決策
を使用して入力10進数を除算できます。
補数によって返される10進数と元の10進数が常に2 n -1に等しいことを知るのは非常に簡単なので、決定する必要があります。元の10進数が属する間隔。
while(N>pow(2,i)-1){
i++;
}
最後の2n -1-Nに戻る
ソースコード
int bitwiseComplement(int N){
int i=1;
while(N>pow(2,i)-1)i++;
return pow(2,i)-1-N;
}