题目描述
求1⨁2⨁⋯⨁N 的值。
A⨁B 即A , B 按位异或。
输入输出格式
输入格式:
1 个整数N。
输出格式:
1 个整数,表示所求的值。
解题思路:
当x为奇数时,x可以表示一个以1结尾的二进制数,而x-1转成二进制除了结尾为0以外,其他数位与x相同,所以x^x-1=1
然后记录一下1~n中有多少对(x,x-1),得到所有数对的异或结果(很多个1异或,奇数个为1,偶数个为0)
ans=ans%2; //计算出所有数对的异或结果
然后再特殊处理1,如果是偶数,还需要处理n,将ans与它们异或得到最后的答案
见代码:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
long long n,ans;
cin>>n;
if(n%2==1)
{
ans=(n-1)/2;
ans=ans%2;
ans=ans^1;
}
else {
ans=n/2-1;
ans=ans%2;
ans=ans^1;
ans=ans^n;
}
cout<<ans;
return 0;
}