任意正整數拆分成2的指數冪(2的N次方)之和表示

2的冪指數(2的N次方)從0開始:20、 21、 22、 23、 24、 25......,即: 1、2、4、8、16、32......
任意的正整數都可以由不重復的2的冪指數之和組成,如 14可以表示為 14 = 2+4+8;這里2,4,8不會重復

const arr = [] // 要輸出的結果
let times = 0 // 除以2的次數

/**
 *@param num { number } 要分解的數,必須是正整數
 * */
function judgeOdevity(num) {
  let splitNum;
  if (num < 1) return
  // 判斷數字奇偶性,直到數字小于1為止
  if (num % 2) { // 奇數
    // 2的指數冪只有1為奇數, 所以這個冪指數可以由1和一個偶數來表示,1不能再拆分,所以應該拿出放入結果集
    // 因為這個1是除以2得到的值,所以這個1應該用2的拆分次數冪表示(2^times)
    arr.push(Math.pow(2, times))
    // 減掉1(num - 1)再除以2,得到新的數字
    splitNum = (num - 1) / 2
  } else { // 偶數
    // 直接除以2(num/2)得到新的數字
    splitNum = num / 2
  }
  // 判斷新數字的奇偶性,times加1
  times += 1
  judgeOdevity(splitNum)
}

// 輸入要拆分的正整數
judgeOdevity(13)
// 查看輸出結果
console.log(arr)

測試

  • 測試1: 輸入 47,得到 [1, 2, 4, 8, 32]
  • 測試2: 輸入 7,得到 [1, 2, 4]
  • 測試3: 輸入 13,得到 [1, 4, 8]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。