这个只过了50
by yanghaoyu123 @ 2023-07-28 15:32:21
我看看
by Renovations_ @ 2023-07-28 15:57:08
n-=a[i];
by 小明小红 @ 2023-07-28 16:05:14
@[小明小红](/user/368346) 不止这个
by Renovations_ @ 2023-07-28 16:06:08
```cpp
#include<iostream>
using namespace std;
int main(){
int a[30]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824};
int n;
cin>>n;
if (n%2==0 and n!=0){
for (int i=29;i>=0;--i){
if (n>a[i]){
cout<<a[i]<<" ";
n-=a[i];
}
else if (a[i]==n){
cout<<a[i];break;
}
}
}
else{
cout<<"-1";
}
return 0;
}
```
by Renovations_ @ 2023-07-28 16:06:41
@[yanghaoyu123](/user/1048576) 还有你这for成立条件是什么鬼,为什么不n==a[i]是break
by 小明小红 @ 2023-07-28 16:06:57
a数组开的太小,break可优化
by Renovations_ @ 2023-07-28 16:07:32
forif条件错误
by Renovations_ @ 2023-07-28 16:08:12
az
by 小明小红 @ 2023-07-28 16:08:18
位运算
```
#include<bits/stdc++.h>
using namespace std;
int n,cnt=2,a[100];
int main(){
scanf("%d",&n);
if(n&2!=0){
printf("-1");
return 0;
}
int i=1;
while(cnt<=n){
a[i++]=n&cnt;
cnt*=2;
}
for(int j=i;j>=1;j--){
if(a[j]!=0) printf("%d ",a[j]);
}
return 0;
}
```
by Em0ty @ 2023-08-02 11:16:19