给定范围内数字的异或

时间:2019-01-23 03:15:28

标签: java algorithm xor

在此给定范围内的数字异或程序中,我无法理解它们如何找到数字异或的算法。如果有人解释该算法如何查找范围内的异或值,那将是非常好的

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*This program is used to find the xor of numbers within the range

u can enter multiple inputs.Here first enter the numbers of inputs u want to enter then in the next line enter the starting and ending range of the xoring 
numbers with space

for example : 

Input :
1
2 3

output:

odd


output displays whether the xor value  within the given range is odd r not

*/

class XORNEY {
    public static void main(String[] args) throws IOException {
        BufferedReader kb = new BufferedReader(new InputStreamReader(System.in));
        int testCases = Integer.parseInt(kb.readLine());
        StringBuilder output = new StringBuilder();

        while (testCases-- > 0) {
            //here without declaring the array dynamically how they are storing all the inputs
            String[] input = kb.readLine().trim().split(" ");  

            long L = Long.parseLong(input[0]);
            long H = Long.parseLong(input[1]);
            //i am more confused here abt why they are doing this
            long count = (H - L) / 2;   
            if ((L & 1) == 1 || (H & 1) == 1) count++;
            output.append((count & 1) == 1 ? "Odd\n" : "Even\n");
        }

        System.out.print(output);
    }
}

1 个答案:

答案 0 :(得分:1)

  

此处未动态声明数组的存储方式   所有输入

他们只是存储每个测试用例行而不是所有输入。每行包含两个用空格隔开的数字,如果用空格将其分开,则会在数组上获得两个数字。

  

我在这里更困惑他们为什么这么做

我可以提出一些想法-

在一定范围内的数字上,您将获得以0和1序列交替结尾的二进制数字。例如-

  • 10-> ***** 0
  • 11-> ***** 1
  • 12-> ***** 0
  • 13-> ***** 1

对于每对0, 1XOR将为1。现在,您需要弄清楚是偶数对还是奇数对。偶数对将产生1到XOR的偶数,并给您一个以0结尾的值,这意味着最终的XOR值是一个even数字。而odd相反。

如果范围中的元素数为偶数,则可以肯定有几对(0, 1)。但是,如果很奇怪,则根据多余的项目0/1,您需要对计算进行调整。