美文网首页
任意正整数拆分成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的指数幂之和表示

    2的幂指数从0开始:2^0、 2^2、 2^3、 2^4、 2^5......,即: 1、2、4、8、16、32....

  • 整数拆分为若干个2的幂数相加

    题目 一个正整数可以表示为多个正整数相加的表达式,表达式中的各个正整数要求都是2的幂。例如给定正整数7,它有下列六...

  • 2019-03-21 蓝桥杯第九届 java 复数冥

    标题:复数幂设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。求 (2+3i)^12345...

  • 回溯法

    题目大意: 给一个正整数列表alist和指定正整数T,不限定每个数的使用次数,返回任意元素相加之和等于指定数的所有...

  • lq_xunlian_Main12(幂方分解)

    问题描述 任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20 同时约定方次用括号来表示,即ab...

  • POJ 4117 简单的数字划分问题

    题目 总时间限制: 100ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n...

  • 同底数幂相乘,底数不变,指数相加

    欢迎关注公z号:沈阳奥数 同底数幂相乘,底数不变,指数相加 课本上的标注:没有特殊说明时,指数m与n都是正整数。 ...

  • 超级素数幂

    问题描述 如果一个数字能表示为pq(表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给...

  • [编程题] 超级素数幂

    如果一个数字能表示为pq(表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整...

  • 829. 连续整数求和

    给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。 示例 1: 输入: n = 5输出: 2解...

网友评论

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

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