题目 题目链接 题意 给定n,求n能被多少个不同的2的正整数次幂组成 思路 存储2的1-35次幂的数 从大到小依次减 若n为奇数则无解输出-1 坑点 无 代码 #include<bits/stdc++.h> #define endl '\n' #define int long long using namespace std; const int N = 2e5+10; typedef long long ll; int num[N]; signed main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int n; cin>>n; if(n%2!=0) { cout<<-1; return 0; } num[1]=2; for(int i=2;i<=35;i++) { num[i]=num[i-1]*2; } for(int i=35;i>=1;i--) { if(n==0) { break; } if(n>=num[i]) { cout<<num[i]<<" "; n-=num[i]; } } return 0; } 总结 水题