231 判断一个数是不是2的幂次方 点击此处返回总目录
342 判断一个数是不是4的幂次方
326 判断一个数是不是3的幂次方
一、判断一个数是不是2的幂次方
【题目】
【方法一】
每次除2看看能不能整除。
【代码】
【结果】
【方法二】
1 2 4 8 16 32...
转化为2进制为:
1 10 100 1000 10000 ...
即只有一个1。 这样就可以有很多种方法来做了。前面在二进制那里讲了三种统计1的个数的方法,都可以用。比如:
可以使用下面的操作,把n的最后一个1消掉,然后判断是不是0。
n & (n-1) //会消掉n的最后一个1。
1010
& 1001
----------
1000
【代码】
【结果】
二、判断一个数是不是4的幂次方
【题目】
【方法一】
跟上一个题目一样。每次除4看看余数是否为0。
代码:
结果:
【方法二】
使用位运算。
我们发现1 4 16 64,对应的二进制是:
1 100 10000 1000000
规律就是,只有一个1,即:(num & (num-1)) ==0
另外1后面要跟偶数个0。即1要出现在1,3,5,7,9...这些位置上。
代码:
结果:
三、判断一个数是不是3的幂次方
【题目】
【代码】
【结果】
这个题就没有什么二进制的规律了。只能老老实实做了。