我只允许你用c++实现计算i,i+1,i+2,...r的异或和 输入格式: 输入包括两个整数1<=i,r<=1018 输出格式: 输出题目描述中的整数 输入样例: 3 6 输出样例 4
时间: 2024-02-22 08:58:33 浏览: 37
好的,那我用 C++ 重新实现一遍。同样是利用异或的性质,求出 i-1 和 r 的异或和,再将两者异或即可得到 i 到 r 的异或和。
下面是 C++ 代码实现:
```cpp
#include <iostream>
using namespace std;
int main() {
long long i, r;
cin >> i >> r;
// 求出 i-1 的异或和
long long xor_i_1 = 0;
for (int j = 0; j < 64; j++) {
if ((i-1) & (1LL<<j)) {
// 如果 i-1 的二进制表示的第 j 位为 1,则将 2^j 加入异或和
xor_i_1 ^= (1LL<<j);
}
}
// 求出 r 的异或和
long long xor_r = 0;
for (int j = 0; j < 64; j++) {
if (r & (1LL<<j)) {
// 如果 r 的二进制表示的第 j 位为 1,则将 2^j 加入异或和
xor_r ^= (1LL<<j);
}
}
// 计算 i 到 r 的异或和
long long xor_i_to_r = xor_i_1 ^ xor_r;
cout << xor_i_to_r << endl;
return 0;
}
```
注意,这里使用了 `1LL` 表示长整型数值 1,而 `1L` 只是表示长整型数值 1。因为题目中的数据范围比较大,所以需要使用长整型。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)