其实就是一个进制转化的题目

#include<bits/stdc++.h>
#define m 32
using namespace std;

typedef long long ll;

int main(){
    ll n;
    cin>>n;

    int  a[32]={0};
    ll k = 32;

    int now;
    while(n){
        now = n  % 2;
        a[k] = !now;    //因为要取反,所以可以在这里直接取
        n /= 2;
        k--;
    }

    ll sum =0;
    for(int i=1;i<=m;i++){//这里不用反转直接就能求答案,好好思考下
        if(a[i] == 1){
            sum += pow(2,i-1);
        } 
    }
    cout<<sum<<endl;
}