题目原文:
Given an integer, write a function to determine if it is a power of two.
题目大意:
给出一个整数,判断是不是2的幂。
题目分析:
跟上题如出一辙,但还有一种方法是利用位运算,即2的幂的最高位是1,其余位全是0这一性质,判断n和n-1按位与是否等于0来解决。@15-信安-L。
源码:(language:c)
递归解法:
bool isPowerOfTwo(int n) {
return (n==0||n==1)?n:(n%2?0:isPowerOfTwo(n/2));
}
按位与解法:
bool isPowerOfTwo(int n) {
return (n&n-1)==0&&n>0;
}
暴力枚举:
bool isPowerOfTwo(int n) {
return (n==1||n==2||n==4||n==8||n==16||n==32||n==64||n==128||n==256||n==512||n==1024||n==2048||n==4096||n==8192||n==16384||n==32768||n==65536||n==131072||n==262144||n==524288||n==1048576||n==2097152||n==4194304||n==8388608||n==16777216||n==33554432||n==67108864||n==134217728||n==268435456||n==536870912||n==1073741824);
}
成绩:
三种算法都是4ms,beats44.98%,众数4ms,55.02%。