判断一个数是否为2的n的次方数,六种方法

来源:互联网 发布:台湾图解gv新域名2017 编辑:程序博客网 时间:2024/05/22 14:53

判断一个数是否为2的n的次方数,是一个很简单的问题。但这里是以多种方式来解决此问题

方法一:将要判断的数转换成二进制数,从左至右,判断是否只有一个1

public static boolean method01(int num){    if(Integer.toBinaryString(num).indexOf('1') == Integer.toBinaryString(num).lastIndexOf('1')){        return true;    }else{        return false;    }}

方法二:将要判断的数与它的前一个数进行按位运算,判断结果是否为0

public static boolean method02(int num){    if((num & (num-1)) == 0)        return true;    else        return false;}

方法三:将要判断的数转换成二进制数,并将其中的0全部舍去,最后判断最后的长度是否为1

public static boolean method03(int num){    return Integer.toBinaryString(num).replaceAll("0", "").length() == 1;}

方法四:将要判断的数转化成字节数组,判断其中的ASCII码

    public static boolean method04(int num) {        if (num == 0) {            return false;        }        boolean flag = true;        String str = Integer.toBinaryString(num);        byte[] bytes = str.getBytes();        for (int i = 1; i < bytes.length; i++) {            System.out.println(bytes[i]);            if (bytes[i] != 48) {                flag = false;                break;            }        }        return flag;    }

方法五:先%2,在除2,判断结果是否为1

public static boolean method05(int num){    int temp = num;    while (temp % 2 == 0) {        temp /= 2;    }    if (temp == 1) {        return true;    } else {        return false;    }}

方法六:设定一个基数为2,将要判断的数与基数比较,若基数小于判断的数,将基数乘2,直至最后大于或等于要判断的数

public static boolean method06(int num) {    boolean flag = false;    int baseNum = 2;    while (true) {        if (num == 1 || baseNum == num) {            flag = true;            break;        } else if (baseNum < num) {            baseNum = 2 * baseNum;        } else {            flag = false;            break;        }    }    return flag;}

总结:综上,其实解决问题的基本思想只有两种,只是实现的方式不同而已。

  • 将数转化为二进制,判断1的个数
  • 将数进行% 、/ 运算判断
0 0