我试图用C实现,它输出一个整数的两个连续1位的数量而不重叠。这是我的代码:
int numPairs(int num){ int count = …
你的方法不合适:
您计算使表达式为空所需的迭代次数 n = n & (n << 1); 。这将是连续1位的最大数量。如果位对是分开的,则结果将与非重叠位对的数量不同。
n = n & (n << 1);
在案件中 7645 , 0x1ddd 要么 0001 1101 1101 1101 在十进制中,有3组连续3个1位,但它们在循环的3次迭代中被取消,因此 count / 2 是 1 。
7645
0x1ddd
0001 1101 1101 1101
count / 2
1
您必须使用不同的算法,例如:
int numPairs(int num) { int count = 0; unsigned int x = num; while (x) { if ((x & 3) == 3) { count++; x >>= 2; } else { x >>= 1; } } return count; }