P5657 格雷码 题目链接
#include <iostream>
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
inline int read(){
int x=0;
char ch = getchar();
while(ch<'0'||ch>'9') {
ch = getchar();
}
while(ch>='0'&&ch<='9') {
x = (x << 1) + (x << 3) + (ch ^ '0');
ch = getchar();
}
return x;
}
signed main(){
int n;
char a[1001]={0};
int i=0,j=1,k;
int p=0,flag=0;
n=read();
k=read();
for (int i=1;i<=n;i++) {
j *= 2;
}
j--;n--;
int m=(i+j)>>1;
int max=0-1;
while(i<j&&n!=max){
//cout<<m<<" "<<n<<" "<<i<<" "<<j<<endl;
if (m>=k) {
a[p++]=flag+'0';
j=m;
flag=0;
m-=pow(2,n-1);
n--;
} else {
a[p++]=(1^flag)+'0';
flag=1;
i=m+1;
m+=pow(2,n-1);
n--;
}
}
for (int i=0;i<p;i++) {
cout<<a[i];
}
return 0;
}
为什么还会有数据过不了呢