342. Power of Four

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example:
Given num = 16, return true. Given num = 5, return false.
判断一个数是否是4的幂次。

2,题目思路
用常规的幂次判断方法是不行的,比如:

return (int)pow(4,15)%num == 0;

虽然这种办法对于2,3等数字是有效的,但是4是2的幂次,因此32在这种条件下是满足所谓4的幂次的(实际并不是)。因此需要另外一种方法。
个人想到的一个方法,就是对4的幂次的二进制形式进行分析。经过分析可以看出,
4 :100
16 :10000
64 : 1000000
对于num,如果num是4的幂次,首先它一定是2的幂次,其次,num-1的二进制形式的1的个数为偶数。
用到了bitset办法来操作。
另外一种方法,则是首先判断num是否是2的幂次,再判断num-1是否是3的倍数即可。

3,程序源码
1:

class Solution {
public:
    bool isPowerOfFour(int num) {
        return (num > 0 && bitset<32>(num-1).count()%2 == 0 && !(num&(num-1)));
    }
};

2,

bool isPowerOfFour(int num) {
    return num > 0 && (num & (num - 1)) == 0 && (num - 1) % 3 == 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值