题目不是很难的题目;但是想到前几天看的一个快速计算 一个十进制数 转换为 二进制 包含 1 的个数
但是到今天又忘了;
计算某个数二进制中1的个数
int CountBits(int v)
{
int num = 0;
while(v)
{
v &= (v-1);
num++;
}
return num;
}本题统计下 1个数为i的数字,储存个数在 num[i]里面
然后 计算 n*(n+1)/ 2;
题目代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <iomanip>
using namespace std;
#define maxn 100005
__int64 num[64];
int CountBits(int v)
{
int num = 0;
while(v)
{
v &= (v-1);
num++;
}
return num;
}
int main(int argc, char *argv[])
{
int n,a;
scanf("%d",&n);
int Count;
memset(num,0,sizeof(num));
for(int i = 0; i < n; i++)
{
scanf("%d",&a);
num[CountBits(a)]++;
}
__int64 ans = 0;
for(int i = 0; i < 64; i++)
{
ans += (num[i])*(num[i]-1)/2;
}
printf("%I64d\n",ans);
return 0;
}
快速计算十进制数转换为二进制包含1的个数并统计特定位数的数字数量
本文介绍了一个算法来快速计算一个十进制数转换为二进制后的1的个数,并通过此算法统计了特定位数的数字出现的次数。包括实现代码、算法解析和实际应用案例。
598

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



