码迷,mamicode.com
首页 > 其他好文 > 详细

342. 4的幂

时间:2021-06-02 18:41:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:一点   需要   ==   位移   二进制   规律   pow   pre   方法   

思路:
哭了,我只想能想到循环,想到位运算也只能想到循环位移。
然后就去看题解了。
题解是使用 判断是否为2的幂的方法,又哭了,我不是写过这个题了吗......
好吧,那这次就在巩固一次。
用的方法是定义一个常数 用16进制表示就为(0xaaaaaaaa),换成二进制0xa=1010,相当于我4的倍数的都为0,写长一点更容易发现规律,1010,1010,把每个位转为十进制就是128 64 32 16 8 4 2 1,那么就是64 16 4 1的位置为0,现在也可以看清楚了,我么们在为4的幂的位上置0,我们将它和传入的数n进行相与,那么就能得到如果他是4的幂,他就为0否则为1。但你会发现这存在一个问题,例如输入的n=5=(0101)那么此时相与也为0了,因此我们还需要额外的判断最后一位为不为0。
那么我们通过n&(n-1)==0来解决,如果它最低位为1,那么计算后会得到n-1,如果是4的倍数-1,那么相与就为0,因此这就解决了边际条件。因为4的幂比不可能小于0,所以n>0先过滤掉。
代码:

class Solution {
public:
    bool isPowerOfFour(int n) {
        return (n>0)&&((n&(n-1))==0)&&((n&0xaaaaaaaa)==0);
    }
};

342. 4的幂

标签:一点   需要   ==   位移   二进制   规律   pow   pre   方法   

原文地址:https://www.cnblogs.com/Mrsdwang/p/14830905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!