題目
給定一個由 1 和 0 組成的數組,將等效的二進位值轉換為整數。
例如:[0, 0, 0, 1] 被視為 0001,即 1 的二進位表示法。
例子:
Testing: [0, 0, 0, 1] ==> 1 Testing: [0, 0, 1, 0] ==> 2 Testing: [0, 1, 0, 1] ==> 5 Testing: [1, 0, 0, 1] ==> 9 Testing: [0, 0, 1, 0] ==> 2 Testing: [0, 1, 1, 0] ==> 6 Testing: [1, 1, 1, 1] ==> 15 Testing: [1, 0, 1, 1] ==> 11
然而,數組可以有不同的長度,而不僅限於 4。
拆解流程
依據題意可整理出以下重點:
- 目標:計算陣列的總和
- 規則:以二進位制計算
- 方法
- 建立一個變數存放累加後的結果
- 透過迴圈進行累加
- 加入判斷:只有在傳入 1 時才會累加,因為指數 2**0 會得到 1 ,會導致預料外的結果
程式撰寫
const binaryArrayToNumber = (arr) => {
let newArr = arr.reverse();
let count = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] === 1) {
count += 2 ** i;
}
}
return count;
};
改善寫法
使用 parseInt( ) 方法,寫法超精簡!const binaryArrayToNumber = (arr) => {
return parseInt(arr.join(""), 2);
};
以下來介紹 parseInt( ) 語法:
- 基本語法
parseInt(string, radix);
- 可用來將字串轉為數字型別
- 可傳入兩個參數:第一個參數須傳入字串,會轉型為 Number 型別;第二個參數是指定使用的進位制,值可寫入 2~36
- 會出現 NaN 的情況:當傳入的字串無法被轉換為數字型別,或是該數字不符合進位制的規則,例如二進位制,卻傳入了 456
今天就介紹到這裡,如果大家有其他寫法歡迎一起來討論~