noi2020第一题

原题:https://www.luogu.com.cn/problem/P7071?contestId=37027

满分代码①:二进制&&位运算(&)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n; 
 4 int main(){
 5     cin>>n;
 6     if(n&1)cout<<-1;
 7     else{
 8         for(int i=31;i>=1;i--){
 9             int sum=1<<i;  //1<<31代表二进制中个位上的2向左移31-1=30位,代表2的30次方
10             if(n&sum)cout<<sum<<" ";
11         }
12     }
13     return 0;
14 } 

其中,&不同于&&,它是求这个数二进制上是否有两个数同一位上全是1的情况,如:

14 二进制:1110

8  二进制:1000

4  二进制:0100

2  二进制:0010

所以:

14&8:1000——都是bool类型

14&4:0100

14&2:0010

14&1:0000

满分代码②:模拟

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,i=1; 
 4 int main(){
 5     cin>>n;
 6     if(n%2==1)cout<<-1;
 7     else{
 8         while(n){
 9             int sum=pow(2,i);
10             if(sum>n){
11                 cout<<sum/2<<" ";
12                 n-=sum/2;
13                 i=0;
14             }
15             i++;
16         }
17     }
18     return 0;
19 } 

 

posted @ 2020-11-21 21:35  九州霜  阅读(198)  评论(0编辑  收藏  举报