美文网首页
任意正整数拆分成2的指数幂之和表示

任意正整数拆分成2的指数幂之和表示

作者: lsh1992 | 来源:发表于2020-05-13 11:46 被阅读0次

    2的幂指数从0开始:2^0、 2^2、 2^3、 2^4、 2^5......,即: 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]

    相关文章

      网友评论

          本文标题:任意正整数拆分成2的指数幂之和表示

          本文链接:https://www.haomeiwen.com/subject/hkognhtx.html