最簡的辦法:
判斷乙個正整數 i 是不是2的乘方 只要看 (i & (i - 1))==0 是否為true即可。
原理:凡是2的乘方的正整數,其二進位制數必然是以1為首位,其它位都是0。這時候如果給它減1,(在位數相同的情況下)就會變成首位是0,其它位全部是1的結果,然後用「位與」運算,得到的結果是0,就說明這個正整數是2的乘方。
例如:2的1次方是2,二進位制數為10,(2-1)之後變成1,二進位制數為01,進行位與運算(10 & 01)得到的結果是二進位制00,就是結果0.
2的2次方是4,二進位制數為100,(2-1)之後變成3,二進位制數為011,進行位與運算(100 & 011)得到的結果是二進位制000,就是結果0.
判斷乙個數是不是2的冪
將2的冪次方寫成二進位制形式後,很容易就會發現有乙個特點 二進位制中只有乙個1,並且1後面跟了n個0 因此問題可以轉化為判斷1後面是否跟了n個0就可以了。如果將這個數減去1後會發現,僅有的那個1會變為0,而原來的那n個0會變為1 因此將原來的數與去減去1後的數字進行與運算後會發現為零。最快速的方法 ...
判斷乙個數是不是2的冪
我們經常會遇到這樣乙個問題,就是判斷某個資料是否為2的n 次方 1,2,4,8,16.例如如果使用者輸入的不是 2 n,則要求使用者重新輸入。為了說明這種判斷演算法,我首先構造乙個測試程式,如下 include include int main end clock printf the total ...
LintCode判斷乙個數是不是回文數
判斷乙個數是不是回文數 我的想法是先將數字變成陣列,然後設定兩個指標分別從開頭和末尾一一比對.話不多說,如下 package com.yangshunfan.lintcode 判斷乙個數是不是回文數 public class huiwenshu 設定兩個指標 int left 0 int right...