任意正整数拆分成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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容