判断一个数是否为2的N次方

来源:互联网 发布:剑网三曹雪阳脸型数据 编辑:程序博客网 时间:2024/05/16 07:30
package AboutMove;//判断是否为2的次方public class AboutMove {public static Boolean Judge(int n){if(n<1)return false;int i=1;while(i<=n){if(i==n)return true;i<<=1;}return false;}public static void main(String[] args) {int n=6;System.out.println(Judge(n));}}

注意点千万不能在第15行写成n>>=1;因为6/2=3;3/2=1这是整形

时间复杂度为O(logn)

算法改进,由于一个数是2的N次方可以转换为这个数对应的二进制表示中是否只有一位为1.如果一个数的二进制表示只有一位是1,例如n=0010000,那么num-1的二进制表示为num-1=0001111,由于num与num-1二进制表示中每一位都不相同,因此num&(num-1)的运算结果为0,可以利用这种方法来判断一个数是否为2的N次方。

改进后代码

public static Boolean ChangeJudge(int n){if(n<1) return false;int m=n&(n-1);return m==0;}public static void main(String[] args) {int n=6;System.out.println(ChangeJudge(n));}


0 0
原创粉丝点击