当n为2的正整数次幂时的处理不当。
hack:
```cpp
input:1024
ans:1024
your ans:512 256 128 64 32 16 8 4 2 1
```
应把
```cpp
while(n>sum)
```
改为
```cpp
while(n>=sum)
```
保证n==sum时能够正确处理。
by Vector_ @ 2020-11-17 21:57:11
也可以用递归来做,边界设为$n≤1$,用for找到最小大于$n$的2的$x$次方,用$n$减去2的$x-1$次方,拿数组存$x-1$,再递归$n$就可以了。
```cpp
void split(ll n){
if(n<=1)return ;
ll nmax=1;
for(ll i=1;i<=31;i++){
if(ll(1<<i)>n){
nmax=i-1;
break;
}
}
n-=ll(1<<nmax);
plan[ind++]=nmax;
split(n);
}
```
by xtracer @ 2020-11-17 22:06:26
@[cy陈旸](/user/216123)
[提交记录](https://www.luogu.com.cn/record/41853776)以及[完整代码](https://www.luogu.com.cn/paste/vmfyle9m)
by xtracer @ 2020-11-17 22:09:57
@[Vector_](/user/126763) **谢谢大佬!AC了**
by cyS_E_F @ 2020-11-17 22:46:21
@[xtracer](/user/341049) **谢谢,懂了**
by cyS_E_F @ 2020-11-17 22:46:57
@[cy陈旸](/user/216123) 不用谢
by xtracer @ 2020-11-18 21:59:12