【c++leetcode】判断一个数是否是2的幂、3的幂、4的幂


2的幂


题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
思路:一个数是2的次方那么它32位上只能有一个1,其他都是0
方法1:通过将这个数与1进行&运算,判断1的个数是否是1.

class Solution {
public:
    bool isPowerOfTwo(int n) {
        int t = n;
        int ones = 0;
        while(t > 0){
            ones += (t & 1);
            t >>= 1;
        }
        return ones == 1;
    }
};

方法2:
利用n&(n-1)判断是否为0,如果是0则为2的幂

class Solution {
public:
    bool isPowerOfTwo(int n) {
      //  int t = n;
       // int ones = 0;
       // while(t > 0){
       //     ones += (t & 1);
        //    t >>= 1;
        //}
      //return ones == 1;
      if(n == 1)
      {
          return true;
      }
      else if(n > 1)
      {
          return ((n%2) == 0) && isPowerOfTwo(n/2);
      }
      else
      {
          return false;
      }
    }

};

3的幂

和判断2的幂的方法一样。

class Solution 
{
public:
    bool isPowerOfThree(int n) 
    {
        if(n <= 0)
            return false;
        else if(n == 1)
            return true;
        else
            return n % 3 == 0 && isPowerOfThree(n / 3);
    }
};

4的幂(按照题目要求,不能使用循环或者迭代)

题目:给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。你能不使用循环或者递归来完成本题吗?
思路:一个数是4的幂一定是2的幂,但是一个数是2的幂不一定是4的幂。如下图所示,上下两幅图加起来就是2的幂,但是4的幂只在基位,因此可以通过与奇数位都是1,偶数为都是0的数(1010101010101010101010101010101)进行与运算,结果仍为原来数。
在这里插入图片描述

class Solution {
public:
    bool isPowerOfFour(int num) {
    return num > 0 && !(num & num - 1) && (num & 0x55555555) == num;
    }
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值