您的位置:首页 > 其它

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

2016-03-24 22:54 330 查看
判断一个数是否为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的个数

将数进行% 、/ 运算判断
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息