代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
long long int i=0,j=0,t=0,n=0,a[100010]={0},b[30]={0};
long long int x[30]={0},re=0;
int main()
{
scanf("%lld",&n);
for(i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
for(i=0;i<30;i++)
{ for(j=0;j<n;j++)
{
t=pow(2,i); if((a[j]/t%2)!=0) b[i]++;
}
}
for(i=0;i<30;i++)
{
re+=(b[i]*(b[i]-1)+2*b[i]*(n-b[i]))*pow(2,i);
}
printf("%lld",re);
return 0;
}
位运算求组合数之和

本文介绍了一种使用位运算来求解特定数组中所有元素的每一种可能的组合数之和的方法。通过预处理和高效算法实现,能够在较短时间内得出结果。代码示例采用C语言,展示了如何通过循环和条件判断来更新变量并最终输出结果。

被折叠的 条评论
为什么被折叠?



