解题思路:
1.由题可得,优秀的拆分的话是可以分成若干个不同的2的正整数次幂,我们直到计算机内是以二进制来存储数的,只要最低位上是1,那么即使奇数,对应的是2的0次幂,是不符合题意的,所以,只有偶数才存在优秀的拆分
2.那么首先判断,如果是奇数,那么直接输出-1,结束程序即可
3.如果是偶数的话,那么我们将他转化为二进制,如果此时的余数是1的话,代表这个数位pow(2,cnt),将这个数存入数组,即可
4.最后注意是倒序输出
#include<bits/stdc++.h>
using namespace std;
int a[1000000];
int main()
{
int n,num=0,cnt=0;
cin>>n;
if(n%2==1)
{
cout<<-1;
return 0;
}//如果是奇数,直接输出-1
while(n!=0)//对n进行数位分离
{
int t=n%2;
if(t==1)
a[++num]=pow(2,cnt);//将结果存入数组中
n=n/2;
cnt++;
}
for(int i=num;i>=1;i--)//倒序输出
cout<<a[i]<<" ";
return 0;
}