每一個非負整數 N 都有其二進制表示。例如, 5 能夠被表示爲二進制 「101」,11 能夠用二進制 「1011」 表示,依此類推。注意,除 N = 0 外,任何二進制表示中都不含前導零。web
二進制的反碼錶示是將每一個 1 改成 0 且每一個 0 變爲 1。例如,二進制數 「101」 的二進制反碼爲 「010」。svg
給定十進制數 N,返回其二進制表示的反碼所對應的十進制整數。.net
示例 1:code
輸入:5
輸出:2
解釋:5 的二進制表示爲 「101」,其二進制反碼爲 「010」,也就是十進制中的 2 。
示例 2:xml
輸入:7
輸出:0
解釋:7 的二進制表示爲 「111」,其二進制反碼爲 「000」,也就是十進制中的 0 。
示例 3:get
輸入:10
輸出:5
解釋:10 的二進制表示爲 「1010」,其二進制反碼爲 「0101」,也就是十進制中的 5 。it
提示:io
0 <= N < 10^9class
class Solution { public: int bitwiseComplement(int N) { vector<int>v; vector<int>r; int x,y=0,z; if(!N) return 1; while(N) { x=N%2; v.push_back(x); N/=2; } while(!v.empty()) {z=v.back(); if(z) z=0; else z=1; v.pop_back(); r.push_back(z); } int i; for(i=0;i<r.size();i++) if(r[i]) break; for(int j=r.size()-1, k=0;j>=i;j--) y+=r[j]*pow(2,k++); return y; } };
N=0,必定要額外拿出來單獨考慮,由於它無法進入第一個while,
就不能處理了。webkit
本文分享 CSDN - 希境。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。