231. 2 的幂
如果一个数是2的幂 那他转成二进制那肯定只会有一个1 并且1是在最前面的和这个数减1的数做且运算那必定是0.
比如8的二进制是1000 7的二进制是0111 他们做且运算得出的就是0
class Solution { public: bool isPowerOfTwo(int n) { if (n < 1) { return false; } return (n & n - 1) == 0; } };
列出所有剩下几的幂都可以这样做就是要考虑范围
class Solution { public: bool isPowerOfTwo(int n) { if (n == 1) { return true; } if (n <= 0 ) { return false; } unsigned int k = 1;//范围2的三十二次方-1 int i; for ( i = 1; i < 31; ++i) { k *= 2; if (k == n) return true; } return false; } };
326. 3 的幂
n 对 3 进行试除,直到 n 不再与 3 呈倍数关系,最后判断 n 是否为 3^0 = 1
class Solution { public boolean isPowerOfThree(int n) { if (n <= 0) return false; while (n % 3 == 0) n /= 3; return n == 1; } } class Solution { public: bool isPowerOfThree(int n) { if (n == 0) return false; if (n == 1) return true; unsigned int k = 1; int i; for (i = 1; i <= 20;++i) { k *= 3; if (k == n) return true; } return false; } };
342. 4的幂
class Solution { public: bool isPowerOfFour(int n) { if (n == 0) return false; while (n != 1) { if (n % 4 != 0) return false; n = n / 4; } return true; } }; class Solution { public: bool isPowerOfFour(int n) { if (n == 0) return false; if (n == 1) return true; unsigned int k = 1; int i; for (i = 1; i<=16; ++i) { k *= 4; if(k == n) return true; } return false; } };