搞二进制直接用除不就行了?不需要减来减去吧?
```cpp
//求得二进制存放到数组里
bool b[25]//根据题意,n最大1000w,转成二进制也就24位,多留一位防止越界
int idx=24;
while(n){
b[idx--]=n&1;//把当前个位的值放到相应位置
n>>=1;//除以2,右移速度快,高时间复杂度里用这个避免TLE,后面继续使用n时当前十位变成各位
}
```
还有,本题不需开long long,因为题目规定**对于100%的数据,n<=10,000,000**。意思就是**int绝对能存下n**并且**25位bool绝对能存n的二进制**。
------------
最终AC代码:
```cpp
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
if(n&1)
cout << -1;
return 0;
}
for(int i=24;i>0;i--){
if((n>>i)&1)cout << (1<<i) << ' ';
}
return 0;
}
```
by TNT666 @ 2021-10-06 18:25:50