随笔分类 - 笔试&&面试(网摘)
摘录自己平时看到的一些面试或笔试题
摘要:求整数的二进制表示中1的个数,最直接的方式是求出其二进制表示,再计算出二进制表示中1的个数。但是这种方法的效率较低。因为我们只需要统计二进制表示中1的个数,所以没有必要将整数先转化为二进制,可以在对整数处理的过程中计数。整数转化为二进制,除了直接除以2以外,位操作的右移一位可以实现同样的功能。右移过程中会将最后一们直接丢弃,因此在右移操作之前需要先判断最后一们是否为1,使用“与”操作可以实现。例如如果n的最后一样是1,那么a & 0x01 = 1,否则a & 0x01 = 0。由此可以写出实现代码: 1 #include <stdio.h> 2 3 int main
阅读全文
摘要:题目: 不使用/,%,+和*,如何判断一个数能否被3整除解答: 关键提示: 如果n的二进制末位为0,那么n和n>>1同时被3整除或者不整除 如果n的二进制末位为1,那么n和(n>>1)-1同时被3整除或者不整除 1 bool IsTimesOf3(int n) 2 { 3 int lastPosition; 4 if (n < 0) 5 n = - n; 6 while (n > 0) 7 { 8 lastPosition = n & 1; // 0 or 1 9 n ...
阅读全文

浙公网安备 33010602011771号