思维题
题解:
因为是异或的计算
我们假设输入了一个10
它对应的二进制是:
1010
那么1-10来说,一共有10中对应的二进制
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
总有一个二进制数可以补齐1010 中0的位置
所以我们直接将1010补位1111输出对应的十进制即可
代码:
/*Keep on going Never give up*/ #pragma GCC optimize(3,"Ofast","inline") #include <bits/stdc++.h> const int maxn = 55; const int MaxN = 0x3f3f3f3f; const int MinN = 0xc0c0c00c; typedef long long ll; const int mod = 100000000; using namespace std; int main() { long long n; cin>>n; if(n==1){ cout<<0<<endl; return 0; } long long x=1; while(x<=n){ x*=2; } cout<<x-1<<endl; return 0; }