利用位运算:观察知2的幂二进制一定是0000100000格式的,减一以后得到的数所有位的数字一定都是1,直接判断
class Solution { public: bool isPowerOfTwo(int n) { if(n<=0) return false; int m=n-1; while(m) { if(!(m&1)) return false; m>>=1; } return true; } };
暴力一直除2
class Solution { public: bool isPowerOfTwo(int n) { if(n<=0) return false; while(n%2==0){ n/=2; } return n==1; } };
观察知int范围内最大的3的幂次就是3的19次方,直接判断是不是其倍数(3是一个质数,也就是说3里面不包含其他因子,也就是说3的19次方中的因子一定只有3和3的幂)
class Solution { public: bool isPowerOfThree(int n) { return n > 0 && 1162261467 % n == 0; } };
class Solution { public: bool isPowerOfFour(int n){ if(n <= 0) { return false; } int x = (int)(log2(n) / log2(4) + 1e-8); return fabs(n - pow(4, x)) < 1e-8; } };