第十一天(位运算)
今天完成题目:342,231,1668,1670,476,191 342:4的幂
通过列出数学式子,可以证明,4^a = 2^(2a),所以只要证明其指数是偶数即可
通过num > 0 and num & (num - 1) == 0 and num & 0xaaaaaaaa == 0,根据位特征判断
通过膜运算,2^k mod 3 = 2, 4^k mod 3 = 1,来区分2和4
231:2的幂
通过num > 0 and num & (num - 1) == 0,根据位特征判断
1668:插入
'{:032b}'.format(N)可以将整数换成32位二进制
可以使用掩码,将需要改变的位置为0,不需要的置为1,通过&运算截取,通过|运算添加.
1670:翻转数位
逻辑清楚即可
476:数字的补位
正常取反是有前导零位的
这里通过字符的方法可以变成没有前导零位的取反
191:位1的个数
跟前面某题一样bin(n).count('1')即可
最后更新于
这有帮助吗?