先要看懂(奇特思维)
by landernal @ 2021-10-10 19:09:13
第一层while循环条件a>0
by rsrsr @ 2021-10-10 19:12:24
所以您这里面 a 怎么小于 0 qwq
by Rosaya @ 2021-10-10 19:13:11
```
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
if(n % 2 == 1) {
cout << -1;
return 0;
}
int a = n;
int d = 0, anslen = 0;
int ans[100001] = {};
while(a >= 0) {//这里改成a>0,因为a最后不管是1/2还是0/2,都是0,会死循环
while(a % 2 != 1) {
d++;
a /= 2;
}
ans[anslen] = pow(2, d);
a--;//这里也是a/2啊,你自己模拟一下
anslen++;
//这里同样要d++
}
sort(ans, ans + anslen);
for(int i = anslen - 1; i >= 0; i--) {
cout << ans[i] << " ";
}
return 0;
}
```
AC代码:
```
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
if(n % 2 == 1) {
cout << -1;
return 0;
}
int a = n;
int d = 0, anslen = 0;
int ans[100001] = {};
while(a > 0) {
while(a % 2 != 1) {
d++;
a /= 2;
}
ans[anslen] = pow(2, d);
a/=2;
d++;
anslen++;
}
sort(ans, ans + anslen);
for(int i = anslen - 1; i >= 0; i--) {
cout << ans[i] << " ";
}
return 0;
}
```
by ChickenDrinkingMilk @ 2021-10-10 19:18:07
@[刘煜周](/user/494192) 谢谢
by landernal @ 2021-10-10 19:20:13
@[Richard0213](/user/521302) 不谢
by ChickenDrinkingMilk @ 2021-10-10 19:21:01