小w的进制转换
可以把原数先转换为二进制
然后对于前半部分,后半部分就是前半部分取反后逆序的结果
然后分两种情况讨论一下就行了
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t, n;
int check(int len){
int x = 0, ans = (n >> (len >> 1));
x = ans << (len >> 1);
for(int i = 1; i <= (len >> 1); i ++){
if(!((1ll << (i - 1)) & ans)) x |= (1ll << (len / 2 - i));
}
if(x <= n) return ans;
return ans - 1;
}
signed main(){
scanf("%d", &t);
while(t --){
scanf("%lld", &n);
int bit = 0, m = n;
for(; m; m >>= 1) bit ++;
if(bit & 1) printf("%lld\n", (1ll << (bit >> 1)) - 1);
else printf("%lld\n", check(bit));
}
return 0;
}