我正在尝试创建一个函数,该函数接收一个数字作为参数并对该数字执行操作以找出其最接近的2的幂,然后将其加起来。例如,如果用户输入4,则该函数将附加4,因为它已经是2的幂。如果用户输入14,则该函数应看到14不是2的幂,而最接近的2的幂组成14是2,4和8。

重要说明:
我只会上升到2 ^ 9。

我到目前为止所拥有的:

def powers_finder(n):
    powers=[]
    i=0
    total=0
    while i<10:
         value=2**i
         total=total+value
         i=i+1
         #This if statement is for if the user enters a power of 2 as n
         #Then the number will be appended right away into my powers list.
         if value==n:
            powers.append(value)

这里的问题是,如果用户输入5,因为(n)5由2 ^ 2 = 4和2 ^ 0 = 1 4 + 1 = 5的幂组成。如何扩展我的功能以包括此过程?

谢谢你!

最佳答案

最有效的方法是:

def myfunc(x):
    powers = []
    i = 1
    while i <= x:
        if i & x:
            powers.append(i)
        i <<= 1
    return powers

10-06 15:39