判斷乙個數是不是2的幾次冪,最簡單粗暴的做法就是直接迭代除以2,這裡有乙個更好的方法,那就是採用位運算。
我們觀察下面屬於2的幾次冪的數的變化規律,用2進製表示。
十進位制 二進位制0 0
2 10
4 100
8 1000
16 10000
我們會發現凡是2的幾次冪0除外,用二進位制表示第一位全是1,後面全是0。這個規律好像是這樣但是有什麼用呢,不要急,你再看一下比他小乙個數的規律就懂了。
十進位制 二進位制1 01
3 011
7 0111
15 01111
發現比他小乙個數全是第一位為0後面全為1,剛剛跟2的幾次冪對應的數相反,這時就可以用位運算中的與運算來解決了。
解決**:
def judge(num):num =int(num)
return
true
if num == 0 or num & (num - 1) == 0 else
false
判斷乙個數是否是回文數
題目 定義回文數的概念如下 如果乙個非負數左右完全對應,則該數是回文數,如 121,22 如果乙個負數的絕對值左右完全對應,則該數是回文數,如 121,22 public static void main string args printrandm arr,3 1 5 4 system.out.p...
判斷乙個數是否是質數
乙個數如果可以進行因數分解,那麼分解的兩個數一定是乙個小於等於sqrt n 乙個大於等於sqrt n 因此遍歷到sqrt n 即可。因為如果sqrt n 左側找不到因數,右側也一定找不到因數。中心思想 遍歷n是否能被2到sqrt n 之間的數整除,如果不能則為質數。import math defis...
判斷乙個數是否是素數
素數釋義 曾稱質數。乙個大於1的正整數,如果除了1和它本身以外,不能被其他正整數整除,就叫素數。如2,3,5,7,11,13,17 public boolean isprime int n for int i 2 i從2開始,一直到小於其自身,依次判斷能否被n整除即可,能夠整除則不是質數,否則是質數...