java 判斷一個數是否是2的整數次冪
阿新 • • 發佈:2019-02-12
有一道演算法題是這樣的,求一個數是否是2的整數次冪。
剛開始我的演算法是這樣寫的:
讓這個數每次都除以2,然後再乘以2,看這兩個數是否相等,不相等就返回false。放在迴圈裡面讓它從頭除到尾。
if (number <2){
returnfalse;
}else{
int temp =0;
while (number >1){
temp = number /2;
returnfalse;
}else{
number = temp;
}
}returntrue;
}
}
用這種思維寫應該是正常的,可能大多數第一反應都會這麼想,但是稍微想想,也可以改進一下,把乘除運算換成移位運算:
publicboolean isPower(int number) {if (number <2) {
} else {
int temp =0;
while (number >1) {
temp = number >>1;
if (temp <<1!= number) {
returnfalse;
} else {
number = temp;
}
}
}
}
這種寫法看似優化了,但是總覺得有迴圈在裡面不夠優化,一次一次的移,不如一次就移到位,不用加迴圈在裡面,把十進位制數轉化成2進位制數:
publicboolean isPower(int number) {if (number <2) {
returnfalse;
} else {
String strNum = Integer.toBinaryString(number);
int length = strNum.length() -1;
int temp = number >> length;
if (temp << length != number) {
returnfalse;
} else {
returntrue;
}
}
}
如果有前面的思維,那麼也可以這樣寫:
publicboolean isPower(int number) {if (number <2) {
returnfalse;
} else {
String temp = Integer.toBinaryString(number); if (temp.lastIndexOf('1') !=0) {
returnfalse;
} else {
returntrue;
}
}
}
因為一個數如果是2的整數冪,那麼它的2進製表示裡面肯定只有一個1, 並且是最高位,當然不考慮負數。