```
#include<iostream>
using namespace std;
int a[100]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608};
int main(){
int k,t=0,n=1;
cin>>k;
if(k%2!=0)cout<<-1;
else
{
for(int i=22;i>0;i--) {
if(a[i - 1] > k) continue;
if(k==a[i - 1])
{
cout<<a[i - 1];
return 0;
}
else
{
t=a[i-1];
cout<<t<<' ';
n++;
if((k-a[i-1])==2)
{
cout<<2;
return 0;
}
else
{
k-=a[i-1];
}
}
}
}
//for(int i=1;i<=10000000;i*=2)cout<<i<<endl;
return 0;
}
```
by sinsop90 @ 2021-01-25 07:07:14
没看懂为什么要 $while(a[i] >= k)$
然后是 $if(k==a[i])$ 要改成 $if(k==a[i-1])$
by sinsop90 @ 2021-01-25 07:08:11
另外 $for$ 循环应该从 $i = 22$ 开始往 $i = 0$ 跑
by sinsop90 @ 2021-01-25 07:09:35
建议不要用打表
by Ryan_Yu @ 2021-01-25 09:39:56
@[sinsop90](/user/141599)
大佬,能否给详细思路
麻烦您了
by tlzhy @ 2021-01-25 23:34:16
@[sinsop90](/user/141599)
为何17 19 20 WA?
by tlzhy @ 2021-01-25 23:35:10
不至于打表吧
by 白スワンの夜 @ 2021-02-01 21:06:02