前言
本题我利用了递归和位移来解决的,大家可以自己想想其他的办法
解法1
public class CalculateNum{
public static final int finallyNum=1;
public static int cal(int num){
if(num<=0){
return num;
}
if(num % 2 !=0){
return num;
}
num=num>>1;
return cal(num);
}
public static void main(String[] args) {
//判断一个数是不是2的N次方
Scanner input=new Scanner(System.in);
System.out.println("请输入整数:");
if(cal(input.nextInt())==finallyNum){
System.out.println("是2的N次方");
}else{
System.out.println("不是2的N次方");
}
}
}
解法2
解法2要比解法1要简单,这个是最推荐的
public class CalculateNum{
public static final int finallyNum=1;
public static boolean cal(int num){
if(num<=0){
return false;
}
if(num==1){
return true;
}
int temp=num & (num-1);
if(temp==0){
return true;
}
return false;
}
public static void main(String[] args) {
//判断一个数是不是2的N次方
Scanner input=new Scanner(System.in);
System.out.println("请输入整数:");
if(cal(input.nextInt())){
System.out.println("是2的N次方");
}else{
System.out.println("不是2的N次方");
}
}
}