题目描述
请实现如下接口
public static int findNumberOf1( int num){
/* 请实现 */
return 0;
}
涉及知识点:注意多组输入输出!!!!!!
输入描述:
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。譬如:输入5 ,5的二进制为101,输出2。
输出描述:
计算整数二进制中1的个数(也被称为汉明重量)。
示例1
输入
5
输出
2
涉及知识点:
- 尽量用移位运算符代替乘除法
- 如果函数参数为 int 需要考虑输入的参数为负数,此时移位运算会陷入死循环,因为左边补的是符号位 1
代码优化:
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n){
n &= (n-1);
++count;
}
return count;
}
};
C++代码实现
#include <iostream>
using namespace std;
int findNumberOf1(int num)
{
int count = 0;
unsigned int flag = 1;
while(flag){
if(num & flag) ++count;
flag <<= 1;
}
return count;
}
int main(){
int num;
while(cin >> num){
cout << findNumberOf1(num) << endl;
}
return 0;
}
C代码如下:
int OneCountBinary(unsigned int n){
int count = 0;
while(n){
if (n % 2){
++count;
}
n /= 2;
}
return count;
}
int main(){
int input;
scanf("%d", &input);
printf("%d", OneCountBinary(input));
return 0;
}
代码生成图
如有不同见解,欢迎留言讨论~~