P3908 异或之和
题目描述
求1 \bigoplus 2 \bigoplus\cdots\bigoplus N1⨁2⨁⋯⨁N 的值。
A \bigoplus BA⨁B 即AA , BB 按位异或。
输入输出格式
输入格式:
1 个整数NN。
输出格式:
1 个整数,表示所求的值。
输入输出样例
说明
• 对于50% 的数据,1 \le N \le 10^61≤N≤106;
• 对于100% 的数据,1 \le N \le 10^{18}1≤N≤1018。
打表找规律
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 100000 using namespace std; int n,m,ans=1; int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int main() { freopen("a.out","w",stdout); printf("%d\n",1,ans); for(int i=2;i<=200;i++) { ans=ans^i; printf("%d %d\n",i,ans); } return 0; }
通过打出的表我们可以发现,当这个数膜4后的值等于0是输出它本身,等于1时答案为1,等于2时,答案为该数+1,等于3数答案为0
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 100000 #define LL long long using namespace std; LL n,m,ans=1; LL read() { LL x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int main() { n=read();m=n%4; if(m==0) ans=n; if(m==1) ans=1; if(m==2) ans=n+1; if(m==3) ans=0; printf("%lld",ans); return 0; }