判断一个数N是否为2的幂(两种方法)

文章介绍了两种方法来判断一个数字是否为2的幂:一种是使用位操作,通过检查二进制表示中是否有且仅有一位为1;另一种是利用C++的pow函数计算幂。isPowerOfTwo函数演示了位操作实现,而pow函数版本则展示了计算幂的简洁方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:确定一个数字是否为 2 的幂

方法一:利用二进制

确定一个数字 n 是否为2的幂的一个有效方法是使用位操作。如果一个数是2的幂,那么它的二进制表示中必定有且仅有一位为1,且这一位在最高位。那么我们用其减去1的结果(所有高位为0,该位及其以下位为1)进行位与操作,结果必然为0。

#include <bits/stdc++.h>
using namespace std;

bool isPowerOfTwo(int n) {
    if (n <= 0) return false;
    return (n & (n - 1)) == 0;
}

int main() {
    int num;
    cin >> num;
    if(isPowerOfTwo(num)) {
        cout << "YES";
    } else {
        cout << "NO";
    }

    return 0;
}

在这段代码中,我们定义了一个名为 isPowerOfTwo 的函数,用来判断输入的数 n 是否为2的幂。我们首先检查 n 是否为非正数,如果是,直接返回 false(因为负数和0不可能是2的幂)。然后再对 nn-1 进行位与操作,结果如果为0,说明 n 是2的幂;否则,n 就不是2的幂。

然后在 main 函数中,我们从用户读入一个数,然后调用 isPowerOfTwo 函数判断这个数是否为2的幂,然后输出相应的提示信息。

其中“(n & (n - 1)) == 0”代表:位与操作,在这个操作中,nn - 1 的每一个对应的二进制位都进行与操作。即当且仅当两个对应位都为1时结果才为1,否则为0。

假设 n 是8,它的二进制表达是 1000,n - 1 就是7,二进制表达是 0111。进行位与操作,结果就是 0000,也就是0。

所以,(n & (n - 1)) == 0 若返回 true,说明 n 的二进制形式只有一个1,从而 n 是2的幂。

方法二:利用pow函数

在C++中,pow函数是计算数学幂的函数,被定义在 <cmath> 库中。

函数原型为:double pow(double base, double exponent),其中 base 是底数,exponent 是指数。这个函数返回 baseexponent 次幂的结果。

比如 pow(2,3) 会返回8,因为2的3次幂等于8。

#include<bits/stdc++.h>

using namespace std;
int main()
{
  // 请在此输入您的代码
  long long n;
  cin>>n;

  for(int i=0;i<30;i++)
  {
    if(n==pow(2,i)) 
    {
      cout<<"YES";
      return 0;
    }
  }
  cout<<"NO";
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值