以二进制的角度看,2的整数次方,就是这个数转化为二进制,除了2的0次方都可以为1;这个数可以拆分为多个2的正整数次方,即,这个数转化为二进制的第一位不为1,即,这个数为奇数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define pi 3.14159
int main(){
long long int n=0,fl=0;
scanf("%lld",&n);
if((n%2)==1)printf("-1");
else{
for(int i=31;i>0;i--){
if(n>=pow(2,i)){
if(fl)putchar(' ');
printf("%lld",(long long int)pow(2,i));
n-=pow(2,i);
fl=1;
}
}
}
return 0;
}