编程之美-微软技术面试心得这本书中详细的讲了几种方法,有兴趣可以去看看。
我现在只写两种比较容易理解的方法。
第一种
2 10
4 100
8 1000
。。。。。
发现规律没有,2的n次方变成二进制后首位为1,其余位都为0。
所以嘞,我们讨巧的可以这么做,假设输入的为int型:
boolean powerof2(int n) { return ((n&(n-1))==0) }
第二种,就是先将这个数对2取模为0,再对2整除,再对2取模,一直到这个数最后为2,如果不能这样做就不是2的n次方幂。这个方法如果不能理解可以拿56这个数,去按照流程自己算一遍。就可以理解这其中的奥妙了。
int count = 1; while(i) { if(2 == i) //注意这里 判断最后为2才是关键所在 { System.out.println("YES"); break; } if(0 == i%2) { i = i/2; count ++; } else { System.out.print("no"); break; } }