我们得到一个整数,任务是判断数字的二进制表示是否包含相等数量的二进制1
和0
的数字?
我想在恒定的时间内解决问题。
我有汉明重量算法帮助计算1s的代码!
请帮助我想要0
的数量!!
答案 0 :(得分:1)
如果x - 是您的号码,则N1是“1”的数字,然后是
int N0 = ceil(log2(x)) - N1;
将计算“0”的数量。别忘了
#include <math.h>
答案 1 :(得分:1)
在生产代码中(我的意思是,如果不受赋值中规定的规则限制),我会这样做:
#include <iostream>
#include <bitset>
int main()
{
int k(24); // an example integer - the one you check for equality of 0's and ones
std::bitset<32> bs(k); // I suppose 32 bit numbers - choose your own length
if ( 16 == bs.count() ) // 16 is half the bit length - count returns the bits that are swithced ON
{
std::cout << "Equal number of 1s and 0s\n";
}
}
我的意思是在所有问题都被标记为c ++
之后答案 2 :(得分:0)
int numberOfZeros = numberOfBinaryDigits - numberOfOnes;
其中二进制数字的数量基于用于数据的存储,或log2。
答案 3 :(得分:0)
32位整数示例:
使用位运算符(和乘法):
int bitcount(unsigned int i)
{
// generate a bit count in each pair of bits
i = i - ( (i >> 1) & 0x55555555);
// generate a bit count in each nibble
i = (i & 0x33333333) + ( (i >> 2) & 0x33333333 );
// sum up the bits counts in the nibbles
return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}
使用gcc popcount:
int bitcount(unsigned int i)
{
return(__builtin_popcount(i));
}
使用visual studio popcnt:
int bitcount(unsigned int i)
{
return(_popcnt(i));
}
// if(16 == bitcount(i)),则等于1和0的数字。