将一个正整数拆分成几个2的n(n为正整数)次方的数

如何把一个任意正整数拆分成几个是2的n(n为正整数)次方的数,

输入9,输出1 8

输入11, 输出8 2 1

输入29 ,输出16 8 4 1

吃肉不长肉 发布于 2022-2-22 10:20 (编辑于 2022-2-25 11:43)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
吃肉不长肉Lv6见习互助
发布于2022-3-3 11:08

image.png

var str = this.getValue();

//获取当前文本控件值

const arr = [] // 要输出的结果

let times = 0 // 除以2的次数

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(str)

// 查看输出结果

_g().setCellValue(1, row-1, arr);

//将数字赋值给B2单元格

最佳回答
0
luojian0323Lv7资深互助
发布于2022-2-22 11:13

9 除了=1+8还有好多种你这要研究算法吗?

  • 吃肉不长肉 吃肉不长肉(提问者) 只能按已有数组的数字进行拆分
    2022-02-22 11:19 
  • luojian0323 luojian0323 回复 吃肉不长肉(提问者) 那你这个 9 ,11,29哪来的? 背景没交待清楚。
    2022-02-22 11:25 
  • 吃肉不长肉 吃肉不长肉(提问者) 回复 luojian0323 后面是相似的两个例子,另外数组已经给定了
    2022-02-22 12:16 
  • 1关注人数
  • 492浏览人数
  • 最后回答于:2022-3-3 11:08
    请选择关闭问题的原因
    确定 取消
    返回顶部