題目描述
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。
解題思路
首先判斷正數形式,若爲正數,則直接轉爲二進制,求1個數;
若爲負數。則先將負號去掉,立一個flag標誌,若flag爲1則將二進制數進行轉爲反碼,再加1
得到的二進制進行求1個數
源碼
public class Solution {
public int NumberOf1(int n) {
int res = transform(n);
return res;
}
public int transform(long num){
//參數num爲輸入的十進制數,參數n爲要轉換的進制
long array[]=new long[32];
int location=0;
int flag = 0;
if(num < 0)
{
num = num *(-1);
flag = 1;
}
while(num!=0){//當輸入的數不爲0時循環執行求餘和賦值
long remainder=num%2;
num=num/2;
array[location]=remainder;//將結果加入到數組中去
location++;
}
while(location <32){
if(location == 31 &&flag == 1)
array[location] = 1;
else
array[location] = 0;
location++;
}
return show(array,location-1,flag);
}
private int show(long[] arr,int n,int flag){
int num = 0;
if(flag == 0){
for(int i=n;i>=0;i--){
//System.out.print(arr[i]+"");
if(arr[i] == 1)
num++;
}
}
else{
for(int i=0;i<n;i++)
{
if(arr[i] == 1)
arr[i] = 0;
else
arr[i] = 1;
}
arr[0] = arr[0] + 1;
for(int i=0;i<n-1;i++){
if(arr[i] >=2)
{
arr[i] = 0;
arr[i+1] = arr[i+1] +1;
}
}
for(int i=n;i>=0;i--){
if(arr[i] == 1)
num++;
}
}
return num;
}
}