例如,我的二进制数为210或11010010,第二,第五,第七和第八位为1,因此结果为[2、5、7、8]。
找到它的最快方法是什么?
答案 0 :(得分:2)
将数字转换为二进制:
>>> format(210, 'b')
'11010010'
使用列表推导和enumerate
查找1的索引:
>>> [i for i, digit in enumerate(reversed('11010010'), 1) if digit == '1']
[2, 5, 7, 8]
答案 1 :(得分:0)
只需遍历您的二进制数即可得到结果。
a=format(210, 'b')
x=[]
for i in range(0,len(a)):
if a[i] == '1':
x.append(i+1)
1个位置是[1、2、4、7]
答案 2 :(得分:0)
最快的方法是通过任何方法预先计算所有组合(其中只有256个),然后存储在一个列表中(列表中)。
您可以通过将1附加到所有条目,然后将2附加到每隔一个条目,然后将3附加到每四个条目,以此类推来构建列表。
答案 3 :(得分:0)
C ++解决方案。
#include<iostream>
using namespace std;
int main()
{
int n=10;
int counter=1;
while(n)
{
if(n&1==1)
{
cout<<counter<<" ";
}
n=n>>1;
counter++;
}
}
阅读一些有关按位移位和&运算符的信息,以正确理解解决方案。