思维题
题解:
因为是异或的计算
我们假设输入了一个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;
}

京公网安备 11010502036488号