We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
XOR represents binary addition without the "carry" for each digit.
We want to see how many values of x that will give us n+x = n^x, which is when XOR is the same as ADDITION. This happens when there are no "carries". To make sure there are no carries, for each digit in "n" that is a 1, we must have the corresponding digit in "x" be a 0. For each digit in "n" that is a 0, we can have the corresponding digit in "x" be either 0 or 1.
Now we calculate the number of possibilities for "x" by counting the number of 0s in "n " (up to the most significant 1 in n), and doing 2^(number of 0s) (where ^ is exponentiation in this case) to count all combinations.
publicclassSolution{publicstaticvoidmain(String[]args){/* Save input */Scannerscan=newScanner(System.in);longn=scan.nextLong();scan.close();/* Calculate number of "x" values that will satisfy n+x = n^x */intzeroes=numZeroes(n);longresult=1L<<zeroes;// same as (long) Math.pow(2, zeroes);System.out.println(result);}privatestaticintnumZeroes(longn){intcount=0;while(n>0){if((n&1)==0){count++;}n>>=1;// divides by 2}returncount;}}
Sum vs XOR
You are viewing a single comment's thread. Return to all comments →
Java solution - passes 100% of test cases
From my HackerRank solutions.
XOR represents binary addition without the "carry" for each digit.
We want to see how many values of x that will give us n+x = n^x, which is when XOR is the same as ADDITION. This happens when there are no "carries". To make sure there are no carries, for each digit in "n" that is a 1, we must have the corresponding digit in "x" be a 0. For each digit in "n" that is a 0, we can have the corresponding digit in "x" be either 0 or 1.
Now we calculate the number of possibilities for "x" by counting the number of 0s in "n " (up to the most significant 1 in n), and doing 2^(number of 0s) (where ^ is exponentiation in this case) to count all combinations.
Let me know if you have any questions.