小度最近学了位运算,一直有着深入思考习惯的小度想到:怎么求从l到r中所有数字的异或和呢?
小度把这个问题交给了你, 希望你能帮帮他。
异或指的是按位异或:
遵循二进制位相同取0,相异取1,例如
则x和y的按位异或结果为
一行两个数表示
输出一个数表示l到r的异或和。
2 4
5
010 xor 011 xor 100 = 101
#include<bits/stdc++.h> using namespace std; long xorSum(long l, long r) { if (l == r) return l; long res = l % 2 ? l++ : 0; // 第一个为奇数则取出计算 res ^= r % 2 ? 0 : r--; // 最后一个为偶数则取出计算 res ^= (r - l + 1) / 2 % 2; return res; } int main() { long l, r; cin >> l >> r; cout << xorSum(l, r) << endl; return 0; }
js怎么写啊,l和r一定要键盘输入吗,js貌似没有这个玩意呀 我的代码,没有管结果为0的异或,内存高点 ^_^ 望指教
let testBegin=2,testEnd=4; function xor(begin,end) { let result = begin; if(begin>end) { new Error('开始大于结束,你在干神魔?') }else if(begin==end) { return result; }else { for(let i=begin+1;i<=end;i++) { result=i^result; } return result; } } console.log(xor(testBegin,testEnd));