输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

本文介绍两种高效算法来计算一个整数在二进制表示中1的个数。第一种方法通过逐位检查,而第二种方法采用位运算技巧,每次迭代消除最低位的1,直至整数变为0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

利用位运算~第二种思路很赞....

?
#include<iostream>
using namespace std;
int count_one_1( int num){        
     int cnt=0;
     //unsigned int i=1;
     int i=1;
     while (i){         
         if (num&i) cnt++;
         i=i<<1;
     }
     return cnt;
}
int count_one_2( int num){      //很赞的方法
     int cnt=0;
     while (num){
         num=num&(num-1);       //101 & 100 = 100; 100 & 011=0;
         cnt++;
     }
     return cnt;
}
int main( void ){
     int num;
     while (cin>>num){
         cout<< "solution1:" <<count_one_1(num)<<endl;
         cout<< "solution2:" <<count_one_2(num)<<endl;
     }
     system ( "pause" );
     return 0;
}

int countOf1(int n) {
    int c = 0;
    if (n<0) { c++; n = n & (1<<(sizeof(int)*8-1)); }
    while (n!=0) {
      c+=tab[n&0xff];
      n >>= 8;
    }
    return c;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值