將n轉換成二進位
從低位位元開始看
數有幾個連續的1
即答案
ex:
17 ---> 10001
右邊數過來只有一個連續的1
ans :1
使用&運算子跟1比較即可知道最低位元是否為1
使用>>運算子可將數字往右位移 左邊補0
(10001>>1) == 01000
(實際上不只5個位元 左邊還有26個位元)
int count=0; int i=0; while((n>>i)){ if((n>>i) & 0x1){ count++; } else { break; } i++; } 使用位元運算來計算此題
你好,感謝你分享解題方向與程式碼片段,很棒的想法
我從你的程式碼看見了一些我認為可以精進的地方,想與你分享:
這是我改寫後的程式碼,供你參考:
https://i.imgur.com/jg7GSh5.png
或是,不喜歡 for 初始化的位置,也可使用while-loop
https://i.imgur.com/CdEK9AO.png
或是,將count初始化置於最初之處
https://i.imgur.com/pNbmuSn.png