昨天看到淘米網絡的一道編程題,給定一個數判斷這個數是不是2的冪。
我自己想到的使用遞歸的方法進行實現,代碼如下。
class squ2
{
public static void main(String[] args)
{
int m=32;
if (is2(m))
{
System.out.println(m+"是2的冪");
};
}
public static boolean is2(int a)
{
if (a==1)
{
return true;
}
if (a%2==1)
{
return false;
}
return is2(a=a/2);
}
}
不過我一個同學用了一個更加簡便的方法:
用這個數和比他小的下一個整數相與,如果結果爲0則該數是2的冪,否則不是,如8和7相與爲0。
代碼如下:
public static boolean is2_1(int b)
{
int w=b&(b-1);
if (w==0)
{
return true;
}
return false;
}
看起來簡便多了,但是還是不知道爲什麼這樣就可以。