力扣1009. 十進制整數的反碼-C語言實現-簡單題

題目

傳送門code

文本

每一個非負整數 N 都有其二進制表示。例如, 5 能夠被表示爲二進制 "101",11 能夠用二進制 "1011" 表示,依此類推。注意,除 N = 0 外,任何二進制表示中都不含前導零。
二進制的反碼錶示是將每一個 1 改成 0 且每一個 0 變爲 1。例如,二進制數 "101" 的二進制反碼爲 "010"。
給你一個十進制數 N,請你返回其二進制表示的反碼所對應的十進制整數。blog

示例 1:圖片

輸入:5
輸出:2
解釋:5 的二進制表示爲 "101",其二進制反碼爲 "010",也就是十進制中的 2 。leetcode

示例 2:get

輸入:7
輸出:0
解釋:7 的二進制表示爲 "111",其二進制反碼爲 "000",也就是十進制中的 0 。源碼

示例 3:it

輸入:10
輸出:5
解釋:10 的二進制表示爲 "1010",其二進制反碼爲 "0101",也就是十進制中的 5 。模板

提示:class

0 <= N < 10^9
本題與 476:https://leetcode-cn.com/problems/number-complement/ 相同

來源:力扣(LeetCode)二進制

模板

int bitwiseComplement(int N){

}

解題

分析

理解題目以後能夠取巧解法
對於輸入的十進制數進行一個範圍劃分
很簡單可知反碼返回的十進制數和原十進制數相加老是等於2n-1因此咱們就須要對原十進制數進行判斷屬於哪一個區間

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;
}

運行結果

在這裏插入圖片描述

相關文章
相關標籤/搜索