我需要将像15这样的数字拆分为这些(0、1、2、4、8)不同的数字,其中一个仅使用一次。
例如,将输出15(8、4、2、1)。
我是一名初学者程序员,因此我对事先缺乏理解深表歉意。
谢谢。
答案 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])