首页 » 未分类 » 正文

2019提高组第一题 格雷码

利用前面的一半是0, 后面的一半是1,直接进行输出。注意后面的一半转换时不要转换错了。编号是0-(2^64 -1),所以可以直接用unsigned long long 就能装k。

#include<bits/stdc++.h>
using namespace std;
int main() {
    int  n;
    unsigned long long k;
    cin >> n >> k;
    long long num = pow(2, n-1);
    int len=0;
    while( num != 0) {
        if(k < num) {
            cout << 0;
        } else {
            k-=num;
            k = num -k -1;
            cout << 1;
        }
        num /=2;
    }
}

发表评论