[leetcode]: 342. Power of Four

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.
给一个整数n,判断是否为4的幂

2.分析

之前已经做过了判断3的幂次方,2的幂次方。
求int32范围内最大的2的幂次方,3的幂次方,通过整除来判断的方法只适用于2和3这样的质数。
由于2的特殊性,所以可以通过bit位为1来判断。
4也很特殊。
1)4=2*2。所以对n开方,然后判断是否为2的幂次方也是可行的。
2)从bit位来看4的幂次方如1=0001,4=0100,16=0001,0000,64=0100,0000.
可以看到bit为1的位总是在每4位的0或3号位上。所以可以先判断n是否为2的幂,再判断是够满足为4的幂。

3.代码

public:
    //开方
    bool isPowerOfFour_1(int num) {
        if (num <= 0)
            return false;
        if (num == 1)
            return true;
        auto x = sqrt(num);
        if (fmod(x, 1) == 0 && !(int(x)&(int(x) - 1)))
            return true;
        return false;
    }
    //log
    bool isPowerOfFour_2(int num) {
        return fmod(log10(num)/log10(4),1)==0;
    }
    //bit判断
    bool isPowerOfFour_3(int n) {
        return n > 0 && (n&(n - 1)) == 0 && (n & 0x55555555);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值