Power of Two

Given an integer, write a function to determine if it is a power of two.(给定一个整数,判断其是否是2的幂)

1.个人分析
与判断是否是3的幂类似,普通解法就是不断地对输入的整数进行整除2,如果是2的幂则结果一定为1。

2.个人解法

bool isPowerOfTwo(int n) 
{
    if(n<1)
        return false;
    while(n%2 == 0){
        n /= 2;
    }
    return n == 1;
}

3.参考解法

bool isPowerOfTwo(int n)
{
    return (n >= 1) && ((n & (n-1)) == 0);
}

该解法使用了位运算,作为2的幂与自身减1后进行与运算一定为0,所以可以此作为判断依据;另外需要注意的是,如果n为0,n&(n-1)也为0,所以需要排除0,又因为n>0且n为整型,因此n>=1。

4.总结
在判断某个整数是否是某个数的幂时,通用的解法如下所示:

bool isPowerOfb(int n) 
{
    if(n<1)
        return false;
    while(n%b == 0){
        n /= b;
    }
    return n == 1;
}

其中b为底数。但通常还存在其他的非迭代解法,比如这里的位操作解法,还有底数为3的整型上限解法或数学解法。

PS:

  • 题目的中文翻译是本人所作,如有偏差敬请指正。
  • 其中的“个人分析”和“个人解法”均是本人最初的想法和做法,不一定是对的,只是作为一个对照和记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值