没想出来不用循环的。记录下。
如果是2的次方,必有num & (nums - 1)
bool isPowerOfFour(int num) { if (num < 1) return false; if (num & (num - 1)) return false; // 排除不是2的倍数 if (num & 0x55555555) return true; // 排除不是4的倍数,此时num是2的次方 return false; }
或者第二步排除,直接(num - 1) % 3为0也可以,如果是4的倍数,减1后必能被3整除,从二进制角度考虑下即可。
不建议用对数,涉及浮点数,精度问题,见: