Likou1009。10進整数の逆コード-C言語の実装-簡単な質問

トピック

ポータル

テキスト

すべての非負の整数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;
}

運転結果

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_44922487/article/details/113859311