题目描述

求1⨁2⨁⋯⨁N 的值。

AB 即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;
}

留下评论