题目链接

​https://www.nowcoder.com/practice/1b46eb4cf3fa49b9965ac3c2c1caf5ad?tpId=37&tqId=21285&tPage=4&rp=&ru=/ta/huawei&qru=/ta/huawei/question-ranking​

题目描述

请实现如下接口

     public   static   int  findNumberOf1( int num)

    {

         /*  请实现  */

         return  0;

    } 譬如:输入5 ,5的二进制为101,输出2

 

涉及知识点:

输入描述:

输入一个整数

输出描述:

计算整数二进制中1的个数

示例1

输入

复制

5

输出

复制

2

题解:

#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n;
while (cin >> n){
int ans = 0;
long bisize[33];
for(int i = 0; i < 33; i++){
bisize[i] = pow(2, i);
}
int l = 32;
while(n > 0){
if(n >= bisize[l]){
n -= bisize[l];
ans++;
}
l--;
if(l < 0){
break;
}
}
cout << ans << endl;
}
return 0;
}

做别的题想到上面算法太sb了。。

#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n;
while (cin >> n){
int ans = 0;
while (n > 0) {
ans += n % 2;
n /= 2;
}
cout << ans << endl;
}
return 0;
}