最完整的思路就是把十进制转换成二进制,然后一位一位判断是否为1
高进制转换低进制最通用的方法就是将数字除以%
(模运算符)低进制(比如2进制的2)
,并将余数存储在数组中,通过/
(除法运算符)将数字除以进制数(2),重复,直到数字小于进制数(2)
#include <iostream>
using namespace std;
int hammingWeight(int n)
{
int arr[32] = { 0 };//int型对应最大就是32位
int num = 1;
int js = 0;//计数,1出现的次数
int temp = 0;
for (int i=0; i < 32; i++)
{
arr[i] = n%2;//对2取余,将余数存入数组
n = n / 2;//对2取余后的商
if (n == 0)//如果取余后的商小于进制(2)了,那么跳出循环
break;
num++;//默认的num为1所以要后自加,如果默认为0就可以放在if语句前面
}
temp = num;//下面为数组的交换
for (int i = 0; i < num /2; i++)//交换次数为num/2次
{
int temp2 = arr[i];
arr[i] = arr[temp - 1];
arr[temp - 1] = temp2;//两个数的交换
temp--;//每次循环往前存储1位
}
for (int i = 0; i < num; i++)
{
if (arr[i] == 1)
js++;//记一的个数
}
return js;
}
int main()
{
int n;
cin >> n;
cout << hammingWeight(n) << endl;
system("pause");
return 0;
}