判断一个十进制正整数是不是2的幂

Description

hry进入大学之后学习了二进制,有一天他遇到这样一个问题,判断一个十进制正整数是不是2的幂?

Input

第一行是一个正整数T,表示有T组测试数据。 每组测试数据有一行一个正整数n。
(1<=T<=10000,1<=n<=1000000000000000000)

Output

每组测试数据输出一行,如果n是2的幂,输出Yes,否则输出No.

Sample Input

5
1
2
3
4
5

Sample Output

Yes
Yes
No
Yes
No

解题思路:

这里我们注意到,如果一个十进制正整数n是2的幂的话,那么他写成二进制形式之后,只有一位为1,其余位都为0。这里我们用位运算,将n减去1,则n-1在在原来为1的那一位为0,之后所有位全为1。因此,如果n为2的幂的话,将n跟n-1用位与运算之后,所得结果的二进制表示应该全为0,即十进制也为0。因此这是一个很有效的判定条件。


C++代码:

#include<iostream>
using namespace std;

int main()
{
    int T;
    cin >> T;
    for (int i = 0; i < T; i++)
    {
        long long n;
        cin >> n;
        if ((n & (n - 1)) == 0)
        {
            cout << "Yes" << endl;
        }
        else
        {
            cout << "No" << endl;
        }
    }
    return 0;
}
/**************************************************************
    Problem: 2580
    Language: C++
    Result: Accepted
    Time:112 ms
    Memory:1484 kb
****************************************************************/

猜你喜欢

转载自blog.csdn.net/ax478/article/details/79849518