1,用一条语句判断是不是2的整数次方。
这个题的思路就是用二进制的方法去想,如果这个数是2的整数次方的话,他的高位就是1,比如说8的话,它的二进制表示就是1000,那他的n-1也就是7的二进制就变成了高位为0,而低位为1的情况,7的二进制表示为0111,因为用的是 位运算里面的 & 运算,就是当两个都为1 的时候,才是一,所以说这里7和8二进制的结果为0000,也就是==0.由此作为判断的条件。
if ((N-1) &(N)==0) 此句成立就表示N是2的整数次方。
package sz;
import java.util.Scanner;
public class 是不是2的整数次方 {//方法2
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int N=s.nextInt();//本题要用到位运算和二进制的思想
if(((N-1)&N)==0){//例如说N=8,那么N-1就是7,8的2进制是1000,而7是0111;因为用的是 位运算里面的 & 运算,就是当两个都为1 的时候,才是一,所以说这里7和8二进制的结果为0000,也就是==0.由此作为判断的条件。
System.out.println(N+"是2的整数次方");
}
else System.out.println(N+"不是2的整数次方");
}
}
package sz;
import java.util.Scanner;
public class 是不是2的整数次方2 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int N =s.nextInt();
int sums=0;//计数,以为如果是2的整数次方的话,只会得到一个1,比如说8的2进制是1000;而6是1100;7是0111;
String str=Integer.toString(N,2);//将输入得数转化成2进制
char []a=str.toCharArray();//将字符串存入字符数组里面
for (int i=0;i<a.length;i++){
if (String.valueOf(a[i]).equals("1")){//先把数组变成字符串然后再用字符串中的equals比较每一个元素看看有几个1
sums++;
}
}
if (sums==1){
System.out.println("yes");
}
else System.out.println("no");
}
}