链接:https://ac.nowcoder.com/acm/contest/11471/F
来源:牛客网
我们都知道有一种位运算叫做异或,那么这道题是一道思维题。
给出一个整数n,请求出1-n之间选取两个数进行异或最大能得出多大?(两个数可以相同)
题解:打个表可以发现,2^(位数)-1,特例1为0
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll calc(ll n){
ll ans=0;
for(ll i=1;i<=n;i++){
for(ll j=1;j<=n;j++){
// printf("%lld\")
ans=max(ans,i^j);
}
}
// printf("%lld\n",ans);
return ans;
}
int main(){
scanf("%lld",&n);
// for(int i=1;i<=n;i++){
// printf("%d %d\n",i,calc(i));
// }
int cnt=0;
while(n){
n>>=1;cnt++;
}
ll ans=(1ll<<cnt)-1;
if(cnt==1) printf("0\n");
else printf("%lld\n",ans);
}