题目
快速判断输入的int型整数是否是4的N次幂。
输入
8
16
15
64
输出
NO
YES
NO
YES
分析
可以直接使用判断3的次方数的对数换底的方法。也可以简接参考2的次方数的方法。这里给出参考2的次方数的方法。
1、n & (n - 1)可以用来判断一个数是否为2的次方数,即二进制下,只有最高位是1,由于2的次方数,不一定是4的次方数,比如8,还需要其他的限定条件,4的次方数的最高位的1都是计数位,那么我们只需与上一个数(0x55555555) <==> 1010101010101010101010101010101,如果得到的数还是其本身,则可以肯定其为4的次方数。
2、在确定这个数是2的次方数之后,减1之后可以被3整除,也是4的次方数
代码一
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
if (n > 0 && !(n & (n - 1)) && (n & 0x55555555) == n)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
return 0;
}
代码二
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
if (n > 0 && !(n & (n - 1)) && (n - 1) % 3 == 0)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
return 0;
}