題目描述
輸入乙個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。
輸入
輸入乙個整數(int型別)。
輸出
這個數轉換成2進製後,輸出1的個數。
樣例輸入
5樣例輸出
2題目分析:
題目要求求出十進位制數轉化為二進位制數後1的個數,我們可以用很多方法求出,具體如下
最簡單的方法就是對n位二進位制數進行逐位檢查,那麼需要檢查n次
還有乙個更快的方法,就是可以直接定位二進位制中1的位置,跳過中間的0,這是乙個神奇的操作,也就是位運算——kk=kk&(kk-1),它的功能是消除二進位制的最後乙個1,連續進行這個操作,每次消除乙個1,直到全部消除為止,操作次數就是1的個數。
ac**
#include
using
namespace std;
intmain()
printf
("%d\n"
, ans);}
return0;
}
另外附上大佬的**也是用的二進位制操作,相比之下,大佬的**就很容易接受,也很容易理解,先普及一下一些位運算的操作符(只限本題)
n&1就是n%2==1
n>>=1就是n/=2
#include
#define ll long long
using
namespace std;
const
int maxn=
1e5+5;
intmain()
printf
("%d\n"
,ans)
;return0;
}
最美好的大概還是那些初識的日子,是對彼此不全然地了解又極度渴望了解的那段時光—————————————————————————僅此紀念曾經失去的人
附上乙個甜甜的故事,故事很長,還請慢慢品嚐~
LeetCode 位1的個數(位運算)
include using namespace std class solution return result 方法2 o m m為n的二進位制的位數 減1操作將最右邊的符號從0變到1,從1變到0,與操作將會移除最右端的1。如果最初n有x個1,那麼經過x次這樣的迭代運算,n將減到0。inthamm...
leetcode 191 位1的個數(位運算)
題目 編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 00000000000000000000000000001011 中,共有三位...
二進位制中1的個數 (位運算)
題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。知識點 1.左移運算子 1 格式 value num num 指定要移動的位數。2 運算規則 按二進位制形式把所有的數字向左移動對應的位數,高位移出 捨棄 低位的空位補零。如果移動的位數超過了該型別的最大位數,那麼編譯器會對...