1 条题解
-
2
这个题目我们可以使用二进制的位运算来做。首先我们知道int正的数据范围是2的31次方-1。所以我们从31枚举到0,首先,我们将数字n的二进制表示向右移动i位,然后再检查右移后的结果的最低位是否为1,如果这个条件成立,那么就输出2的i次方。
AC code
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; if(n%2==1){ cout<<-1; return 0; } for(int i=31;i>=0;i--){ if((n>>i)&1){ cout<<(1<<i)<<' '; } } return 0; }
信息
- ID
- 483
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 153
- 已通过
- 33
- 上传者