給定乙個整數,編寫乙個函式來確定它是否是2的冪。(範圍:1 - 2^31-1)
測試用例:
輸入 : 16, 輸出 : true 因為 2^4 = 16
輸入 : 18, 輸出 : false.
最明顯的暴力方法就是除以2,然後檢查它是否達到1。
var poweroftwo = function(n)
由於給出的範圍在0-2^31-1之間,我們可以使用這個範圍來計算各種可能的輸出,將它們儲存到乙個集合中並進行檢查:
let set = new set(); for(let i=0;i<31;i++) console.log(set); var poweroftwo = function(n)
每一家公司提出乙個看起來易於理解和實現的問題時,這個問題一定與位操作有關。
對於計算機來說,一切都歸結為0和1的組合,包括數字。那麼讓我們來看看n=0到31時,表示2^n的數字是如何以位的形式表示的。
根據上圖我們找到規律是:2的冪的數字只有1位被設定為1,其餘的為0。
位操作符用於在最基本的層次上,即按記憶體中表示數值的位來運算元值。
按位非操作符由乙個波浪線(~)表示,,執行按位非的結果就是返回數值的反碼。
var num1 = 25; // 二進位制00000000000000000000000000011001var num2 = ~num1; // 二進位制11111111111111111111111111100110alert(num2); // -26
按位與操作符由乙個和號字元( & )表示,它有兩個操作符數。從本質上講,按位與操作就是將兩個數值的每一位對齊,然後根據下表中的規則,對相同位置上的兩個數執行按位與操作:
第乙個數值的位
第二個數值的位結果1
1110
0010
000 按位或操作符由乙個豎線符號(|)表示,同樣也有兩個運算元。按位或操作遵循下面這個真值表。
第乙個數值的位
第二個數值的位結果1
1110
1011
000 按位異或操作符由乙個插入符號(^)表示,也有兩個運算元。以下是按位異或的真值表。
第乙個數值的位
第二個數值的位結果1
1010
1011
000 因此,我們的**歸結為:
編寫函式判斷乙個整數是否為素數
題目內容 編寫函式int isprime int a 用來判斷整數a是否為素數,若是素數,函式返回1,否則返回0。呼叫該函式找出任意給定的n個整數中的素數。注意,1不是素數。輸入格式 一系列待判斷的正整數,以空格隔開,以0表示輸入結束。輸出格式 只輸出輸入的正整數中的素數,順序和輸入一致。資料間以乙...
編寫函式判斷乙個整數是否為素數
題目內容 編寫函式int isprime int a 用來判斷整數a是否為素數,若是素數,函式返回1,否則返回0。呼叫該函式找出任意給定的n個整數中的素數。注意,1不是素數。輸入格式 一系列待判斷的正整數,以空格隔開,以0表示輸入結束。輸出格式 只輸出輸入的正整數中的素數,順序和輸入一致。資料間以乙...
判斷乙個正整數是否素數
素數指的是只能被1和自身整除的大於1的整數 對於每個數num,並不需要從2判斷到num 1,這樣效率很低。假若乙個數可以進行因式分解,那麼分解得到的兩個數必將有乙個小於等於sqrt num 另乙個大於等於sqrt num 所以,我們只要遍歷sqrt num 即可,因為在sqrt num 左側找不到約...