231、326、342 判断一个数是不是2(3、4)的幂次方

    xiaoxiao2022-07-07  196

    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的幂次方

     

    【题目】

    【代码】

     

    【结果】

     

    这个题就没有什么二进制的规律了。只能老老实实做了。

     

     

     

     

     

     

     

     

    最新回复(0)