将数字15拆分为这些(0,1,2,4,8)Python

时间:2019-03-03 02:28:44

标签: python python-3.x numbers

我需要将像15这样的数字拆分为这些(0、1、2、4、8)不同的数字,其中一个仅使用一次。

例如,将输出15(8、4、2、1)。

我是一名初学者程序员,因此我对事先缺乏理解深表歉意。

谢谢。

2 个答案:

答案 0 :(得分:1)

假设您想要一个可以汇总的2的幂次幂的集合,那么下面的内容就足够了:

def ExtractPowersOfTwo(number):
    result = []

    # Find power-of-two that is at least large enough.

    power = 1
    while power < number:
        power *= 2

    # Then check all powers down to 2^0 == 1.

    while power > 0:
        # If number is bigger, add power and adjust number.

        if number >= power:
            result.append(power)
            number -= power

        # Next lowest power.

        power //= 2

    return result

print(ExtractPowersOfTwo(15))
print(ExtractPowersOfTwo(255))
print(ExtractPowersOfTwo(42))
print(ExtractPowersOfTwo(314159265359))

它按预期方式输出(格式化并进行了可读性调整):

          15: [8, 4, 2, 1]
         255: [128, 64, 32, 16, 8, 4, 2, 1]
          42: [32, 8, 2]
314159265359: [274877906944, 34359738368, 4294967296, 536870912,
               67108864, 16777216, 4194304, 1048576, 524288,
               65536, 32768, 16384, 8192, 4096, 1024, 512,
               64, 8, 4, 2, 1]

答案 1 :(得分:0)

您可以继续将数字除以2,前进到下一个2的幂,直到达到零。当结果为奇数时,相应的2的幂就是和的一部分。

  number    = 15
  result    = []
  powerOf2  = 1
  while number > 0:
     if number%2 : result.append(powerOf2)
     powerOf2 *= 2
     number = number // 2
  print(result[::-1])