lowbit(n)定义为非负整数n,在二进制表示下“最低位的1及其后面所有的0” 构成的数值。
例如 n=10 二进制表示为(1010),则 lowbit (n) = 2 (10),
当我们对计算出的 lowbit(n) 进行取log2操作 后,我们可以得到“n的二进制表示下最低位1的位置”,
为了 得到n的二进制表示下所有1的位置 ,我们需要不断的把 n 赋值为 n-lowbit(n) ,直到n=0结束 。
具体见代码 ,
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #include<map>
7 #include<set>
8 #include<vector>
9 #include<queue>
10 #include<stack>
11 #include<list>
12 #include<unordered_map>
13 using namespace std;
14 #define ll long long
15 const int mod=1e9+7;
16 const int inf=1e9+7;
17
18 //const int maxn=
19
20 int lowbit(int n)
21 {
22 return n & (-n);
23 }
24
25 int main()
26 {
27 ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
28 int num;
29 while(cin>>num)
30 {
31 int temp=num;
32 temp=num;
33 while(temp)
34 {
35 int x=lowbit(temp);
36 temp-=x;
37 x=log2(x);
38 cout<<x<<endl;
39 }
40 }
41 return 0;
42 }