既2的幂和3的幂之后,今天我们来把奇技淫巧进行到底吧。
题目链接:
4的幂 - 力扣(LeetCode)leetcode-cn.com题目描述:
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
解题思路:
循环的写法我们肯定是不说的,我们可以和 2 的幂一样用位运算的方式。
如果一个数是 4 的幂,则二进制下它的 1 肯定出现在奇数位,那么满足以下这两个条件的就是 4 的幂了。
- 与1010...1010(偶数位为 1,奇数位为 0)的 32 位的二进制整数相与为 0。
- 二进制下 1 的个数为 1。
代码如下:
class Solution {
public:
bool isPowerOfFour(int num) {
bitset<32> a = num;
return !(num & 2863311530) && a.count()==1;
}
};
如果有任何疑问,欢迎提出。如果有更好的解法,也欢迎告知。