求一个数的二进制有多少个一

x=x&(x-1) 可以将x最后一位的1消除。例如:11111&11110结果为11110,11110&11101结果为11100,11100&11011结果为11000…这样就可以知道一个数二进制有多少个1。

int solve(int x)
{
   int sum = 0;
   while(x)
   {
       x = x&(x-1);
       sum++;
   }
   return sum;//返回的sum就是1的个数
}

例题

链接: link.

#include <bits/stdc++.h>

using namespace std;

const int N = 110;
int num[N];

int solve(int x)
{
    int sum = 0;
    while(x)
    {
        x = x&(x-1);
        sum++;
    }
    return sum;
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++) cin>>num[i];
        sort(num,num+n);
        int Max = 0;
        for(int i=0;i<n-1;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                int ans = solve(num[i]^num[j]);
                Max = max(Max,ans);
            }
        }
        cout<<Max<<endl;
    }
    return 0;
}

解决了如何求一个数的二进制有多少个一,这道例题就很好解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值