```cpp
#include<stdio.h>
int main(void){
int n, k=0;
bool y[30];
scanf("%d",&n);
if(n%2==1)
printf("-1");
else{
while(n!=0){
y[k++]=n%2;
n/=2;
}
for(int i=k;i>0;i--)
if(!y[k--])
printf("%d ",1<<i);
}
return 0;
}
```
by nuo0930 @ 2020-11-19 19:06:15
$y[30]$ 数组没初始化,执行第一轮 for 循环的时候,$y[k--]$ 值不一定为零
hack:
输入:```8```
输出:```16 8 ```
by lcyxds @ 2020-11-19 19:08:14
@[justinjia](/user/373226)
by lcyxds @ 2020-11-19 19:08:56
```
1<<i
```
是1左移i位,也就相当于$1 \times 2^i $
by nuo0930 @ 2020-11-19 19:09:06
@[哪吒三太子](/user/335627)
你这个输入 $2$ 输出的都是错的
by lcyxds @ 2020-11-19 19:09:33
```cpp
#include<stdio.h>
int main(void){
int n, k=0;
bool y[30];
scanf("%d",&n);
if(n%2==1)
printf("-1");
n/=2;
else{
while(n!=0){
y[++k]=n%2;
n/=2;
}
for(int i=k;i>0;i--)
if(!y[i])
printf("%d ",1<<i);
}
return 0;
}
```
by nuo0930 @ 2020-11-19 19:11:12
```cpp
#include<stdio.h>
int main(void){
int n, k=0;
bool y[30];
scanf("%d",&n);
if(n%2==1) {
printf("-1");
retrun 0;
}
n/=2;
else{
while(n!=0){
y[++k]=n%2;
n/=2;
}
for(int i=k;i>0;i--)
if(!y[i])
printf("%d ",1<<i);
}
return 0;
}
```
by nuo0930 @ 2020-11-19 19:12:01
@[哪吒三太子](/user/335627) 编译都过不去,建议先过了样例再发(
by lcyxds @ 2020-11-19 19:12:24
算了我来发吧
by lcyxds @ 2020-11-19 19:12:48
@[justinjia](/user/373226)
```cpp
#include"stdio.h"
#include"math.h"
int main(void){
int n,y[30],k=0;
scanf("%d",&n);
if(n%2==1)
printf("-1");
else{
while(n!=0){
y[k++]=n%2;
n/=2;
}
k--;
for(int i=pow(2,k);i>=2;i/=2)
if(y[k--])
printf("%d ",i);
}
return 0;
}
```
by lcyxds @ 2020-11-19 19:16:02