輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
int16: -32768(-216)到 +32767 (216-1)之間的有符號整數。
int32: -2,147,483,648(-232) 到 +2,147,483,647 (232-1)之間的有符號整數。
int64 :-9,223,372,036,854,775,808 (-264)到 +9,223,372,036,854,775,807(264-1) 之間的整數。
long long能表示264個數,因為要考慮正負數,所以是 -263~ (263-1)。
int是32位整數,上限是 (231-1),下限是 -231
邏輯:正負數處理邏輯不一樣,分開討論。
宣告32位陣列,將其初始化為1,第一步用來存放反碼(由while迴圈實現)。
為了防止在迴圈中產生溢位(針對-2,147,483,648),需要在while迴圈結束後再將符號位置為1。
for迴圈中+1求補碼(不對符號位進行操作),求補碼的同時記錄補碼中1的個數。
public
class
solution
n = n /2;
}}else
int index = arr.length -1;
while
( n !=0)
else
n = n /2;
} arr[0]
=1;int num =1;
for(
int i = arr.length -
1; i >
0; i--
)else
if(arr[i]
+ num ==1)
}}return count;
}}
巧妙地利用移位的辦法和n做與運算,如果該位是0,則與的結果是0。
public
intnumberof1
(int n)
i++;}
return count;
}
對於乙個int n,通過下述辦法可以求得其二進位制
int count =
0, i =0;
while
(i <32)
劍指Offer 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。1 可能引起死迴圈的解法 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷最右邊的...
劍指Offer 二進位制中1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。錯誤解法 public class solution return num 若輸入的數字為負數,因為為補碼表示方式,所以高位一直是1,所以會陷入死迴圈。方法一 從高位開始計算 public class solution return ...
劍指OFFER 二進位制中1的個數
public class solution return count 答案正確 恭喜!您提交的程式通過了所有的測試用例 分析一下 這段小小的 很是巧妙。如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果...