最简单的方法···求一个数是否是2的幂
bool isPowerOfTwo(int n) {
if(n<=0) return false; //考虑情况要全面
if(n==1) return true;
while(n>=2){
if(n%2==1) return false;
n=n/2;
}
return true;
}
另一种方式比较巧妙,也很快 即是判断n和n-1取交集是否为0
bool isPowerOfTwo(int n) {
if(n>0 && (n& (n-1)) ==0)
return true;
return false;
}
另一种trick也很好,是直接用了int里面最大的那个整数取模····
bool isPowerOfTwo(int n) {
if(n<1) return false;
return 4294967296%n==0 ? 1: 0;
}
由于很像,顺便把3的幂这道题也做了,思路和最后的trick一样,找到最大的int中的3的幂
bool isPowerOfThree(int n) {
if(n<1) return false;
return 3486784401%n==0?1:0;
}
bool isPowerOfThree(int n)
{
double a = log10(n)/log10(3);
int m = a;
if((a-m)==0)
return true;
else
return false;
}
第二个做法是用log数学的方法做的···logn/log3如能得出整数,则是对的