第一种,位运算。奇数和1相与结果为1,偶数和1相与结果为0.
奇数肯定不是2的幂,偶数就除2继续判断,一直到除2结果为1为止
#include<stdbool.h>
bool poweroftwo(int n ) {
if(n <= 0)
return false;
while(n > 0)
{
if(n & 1 == 1)
break; //奇数就结束
n = n>>1;
}
if(n > 1) //奇数结束后的结果都>1
return false;
else //偶数结束的结果=1
return true;
}
第二种更简单:要验证是否是2的幂,就一直除2,看最后是否为1
bool poweroftwo(int n ) {
while(n > 0 && n % 2 == 0){
n = n / 2;
}
if(n == 1)
return true;
return false;
}

京公网安备 11010502036488号