分析:一个数是2的幂,那么在计算机中的二进制表达式必然是只有最高位是1(符号位为0),因此算法有两种:
- 把数转换成二进制字符串,判断是否只有最高位是字符1;
只要结果大于1且低位是0就对数进行右移位运算,不满足则不是2的幂,否则是2的幂;
JAVA代码实现如下:
public class PowerNumberJudgeFor2 {
public static void main(String[] args ){
System. out.println( two(1025));
}
//实现一
private static boolean one(long n){
String s=Long. toBinaryString(n);
if( '1'==s.charAt(0) && s.indexOf( "1", 1)==-1){
return true ;
} else {
return false ;
}
}
//实现二
private static boolean two( long n){
long b= n ;
while( true){
if( b>1 ){
if( b%2==0 ){
b=b>>2;
} else {
return false ;
}
} else {
if(b==1){
return true ;
} else {
return false ;
}
}
}
}
}