一个正整数,判断是否是4的次方;(不使用循环、递归)
首先想到的是不停的除4,判断最后是否为1;循环、递归
bool isPowerOfFour(int num)
{
if(num <= 0)
return false;
while(num && (num % 4 == 0))
{
num = num / 4;
}
return num == 1;
}
找规律,不能使用循环、递归,特殊方法:
特殊方法一:
1、是2的次方;
2、num-1后能被3整除;
特殊方法二:
4的次方数的二进制如下:
0000000000000001
0000000000000100
0000000000010000
0000000001000000
0000000100000000
num & 0x55555555 != 0
return num && !(num && (num - 1)) && (num & 0x55555555) != 0;