这样子写为啥不对呀
查看原帖
这样子写为啥不对呀
1272396
huochairenzhishang楼主2024/8/8 18:30
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <map>
#include <cmath>
#include <cstring>
#include <stack>
#include <queue>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N = 3;
vector<ll> num(N);
vector<vector<ll>> nn(3, vector<ll>(200006));
vector<ll> sum(N);
ll max(ll x, ll y){
    return x > y ? x : y;
}
ll min(ll x, ll y){
    return x < y ? x : y;
}
bool cmp(int x, int y){
    return x > y;
}
ll lowbit(ll x){
    return x & -x;
}
ll gcd(ll a, ll b){
    ll r;
    while (b > 0)
    {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}
ll lcm(ll a, ll b){
    return a * b / gcd(a, b);
}
void solve(){
    ll x;cin>>x;
    num.resize(x);
    for(int i=0;i<x;++i) num[i]=0;
    int i=0;
    while(x){
        int y=x&1;
        num[i++]=y;
        x>>=1;
    }
    int k=0;
    for(int j=0;j<i;++j){
        if(num[j]==1&&num[j+1]==1){
            num[j]=-1;
            num[j+1]=0;
            num[j+2]++;
        }
        else if(num[j]==2){
            num[j] = 0;
            num[j + 1]++;
        }
    }
    for(int j=0;j<i+1;++j){
        if (num[j] != 0)
            k = j + 1;
    }
    cout<<k<<'\n';
    for(int j=0;j<k;++j) cout<<num[j]<<' ';
    cout<<'\n';
    return;
}
int main(){
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}
2024/8/8 18:30
加载中...