判断一个数是否为2的n的次方数的六种方法(Java实现)

判断一个数是否为2的n的次方数,这是一个很简单的问题。但这里不是着重解决此问题,而是以不同方式来实现,重点在于不同方式的实现思路

方法一(*****推荐)

实现思路:将要判断的数与它的前一个数进行按位运算,判断结果是否为0
这种方式实现简洁且效率高,推荐使用。

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

实现思路:将要判断的数转换成二进制数,再来判断二进制数中是否只有一个1

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

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

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

实现思路:将要判断的数转化成字节数组,判断其中的ASCII码,0的ASCII码为48

public static boolean isPowerOfTwo(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++) {
	    // 判断除第一位数,其它数是否全是0
		if (bytes[i] != 48) {
			flag = false;
			break;
		}
	}
	return flag;
}
方法五

实现思路:先%2,在除2,判断结果是否为1

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

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

public static boolean isPowerOfTwo(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;
}
总结

上述使用6种方式来解决一个数是否为2的n次方问题,但总体来说,基本思路只有两种

  • 将数转化为二进制,判断1的个数
  • 将数进行% 、/ 运算判断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值