top1编程
← 返回题目
题解

整数幂

1 条题解

  • 0
    @ 2026-8-4 1:13:28

    解题思路

    判断一个数 n 是不是 2 的整数幂,也就是能不能写成 2 的某次方,比如 64 = 2^6。

    先看二进制的特点:

    • 1 写成二进制是 1
    • 2 写成二进制是 10
    • 4 写成二进制是 100
    • 8 写成二进制是 1000

    发现了吗?2 的幂在二进制里只有一位是 1,其余全是 0。

    再看一个巧妙的性质:如果 n 是 2 的幂,比如 8,那么 n-1 = 7,写成二进制是 0111。把 1000 和 0111 做"按位与"(&),每一位上 1&0 都得 0,结果一定是 0。

    反过来,如果 n 不是 2 的幂,那么 n 和 n-1 一定还有某一位同时是 1,按位与的结果就不是 0。

    所以判断方法很简单:

    • n > 0(2 的幂都是正数)
    • 并且 (n & (n - 1)) == 0

    满足这两个条件,就是 2 的整数幂,输出 "yes",否则输出 "no"。

    参考代码

    // 用途:判断一个整数n是不是2的整数幂
    // 技巧:2的幂的二进制只有一个1,n和n-1按位与为0
    #include <iostream>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        if (n > 0 && (n & (n - 1)) == 0) cout << "yes"; // n>0且n&(n-1)==0
        else cout << "no";
        return 0;
    }
    

    复杂度分析

    只需要做一次按位与运算,时间复杂度是 O(1)。不管 n 有多大(在 int 范围内),程序都能瞬间判断出来。

    • 1