题目描述
给定一个正整数 𝑛n ,请你求出最小的正整数 𝑚m ,使得同时满足以下三个条件:
𝑛 & 𝑚≠0𝑛 ∣ 𝑚≠0𝑛⊕𝑚≠0n & m=0n ∣ m=0n⊕m=0
式中:
&&表示两数与,是指两数在二进制形式下按位做与运算
∣∣表示两数或,是指两数在二进制形式下按位做或运算
⊕⊕ 表示两数异或,是指两数在二进制形式下按位做异或运算,所谓异或,是指不同值异或结果为1,相同值异或结果为0,即:
0⊕0=00⊕1=11⊕0=11⊕1=00⊕0=00⊕1=11⊕0=11⊕1=0
输入格式
输入一个正整数 𝑛n
输出格式
输出一个正整数 ,表示满足最小的正整数 𝑚m
数据范围
- 对于30%30%的数据:1≤𝑛≤1001≤n≤100
- 对于60%60%的数据:1≤𝑛≤1051≤n≤105
- 对于100%100%的数据:1≤𝑛≤2×1091≤n≤2×109
样例数据
输入:
2
输出:
3
说明:
m取1时,2&1=0,不满足
m取2时,2^2=0 (^指异或运算),不满足
m取3时,满足条件:
2&3=2
2|3=3
2^3=1
详见代码:
cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i = 1;; i++)
{
if ((i & n) && (i | n) && (i ^ n))
{
cout << i;
break;
}
}
return 0;
}