题解:P7071 [CSP-J2020] 优秀的拆分

· · 题解

题目链接(P7071)

以下是思路 :

#include<bits/stdc++.h>//万能头文件 
using namespace std;
int n;
long long a[30];//以防万一开ll 
int main(){
    cin>>n;
    if(n%2==1){
        cout<<"-1";
        return 0;
    }
    a[1]=1;//初定义a[1]=2^1 
    for(int i=2;i<=26;i++){
        a[i]=a[i-1]*2;//每次乘2 
    }
    for(int i=26;i>=2;i--){//从大往小输出 
        if(n>=a[i]){//能输出就输出 
            n-=a[i];
            cout<<a[i]<<' ';
        }
        if(n==0)return 0;//一个小优化 
    }
    return 0;
}