#include <stdio.h>
bool Four(int num)
{
if (num <= 0)//如果数大于零,返回
return false;
if ((num & num - 1) != 0)//如果x为4 的幂,则x必为2 的幂;如果x不为2的幂,则x必然不为4 的幂
//先判断是否是 2 的幂,如果x为2 的幂,则x的二进制形式必然为10、100、1000、10000、100000……
//则x-1的二进制形式必然为01、011、0111、01111、011111……
//如果x为2 的幂,则x&(x-1)==0
return false;
if ((num & 0x55555555) == num)//如果x是 4 的幂 ,
//0x55555555=0101-0101-0101-0101-0101-0101-0101-0101
return true;
return false;
}
int main()
{
int a =128;
if( Four(a) )
printf("%d是4的幂\n",a);
else
printf("%d不是4的幂\n",a);
return 0;
}
注意4的幂的二进制的形式特点是关键
判断一个数是不是4的幂,时间复杂度O(1)
最新推荐文章于 2022-08-26 18:39:05 发布