7-1 统计非负整数二进制展开中数位1的总数

题目描述:

统计非负整数二进制展开中数位1的总数。如整数64 的二进制展开为00000000 00000000 00000000 00100000 ,数位1的总数为1。

输入格式:

输入一个整数n , 题目保证n 不大于 10的18次方。

输出格式:

输出该整数二进制展开中数位1的总数。

输入样例:

在这里给出一组输入。例如:

441

输出样例:

在这里给出相应的输出。例如:

6

思路描述:

十进制整数展开成二进制数,有0和1两个值,0代表没有值,我们只需要计算1的数量,二进制中所有位数的1转化为对应的十进制数相加,就是十进制的原数,我们可以从最高位开始判断,我们可以用一个整型变量x=1,令之不断*2,当x>n时,说明超过最高位了,因此,x/2此时的值就是二进制最高位所代表的的十进制数,然后用n-x/2得到剩下的值,然后一直循环,直至n<0。

代码如下:

#include <bits/stdc++.h>

using namespace std;

int main(){
    long long n,x=1;
    int count=0;
    cin >> n;
    while(n){
        x*=2;
        if(x>n){
            n=n-x/2;
            count++;
            x=1; 
        }
    }
    cout << count << endl;
    return 0;
}

上一篇:JAVASE知识-02(进制运算&数据类型&变量)


下一篇:位运算的技巧(有拓展的技巧)