Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Equal Sum and XOR in C++
In this problem, we are given an integer n. Our task is to create a program to find the count of integers from i = 0 to n, where sum is equal to XOR i.e. (n+i) = (n^i).
Let’s take an example to understand the problem,
Input: n = 4
Output: 4
Explanation:
Considering all values of i from 0 to n,
i = 0, 4 + 0 = 4, 4^0 = 4
i = 1, 4 + 1 = 5, 4^1 = 5
i = 2, 4 + 2 = 6, 4^2 = 6
i = 3, 4 + 3 = 7, 4^3 = 7
i = 4, 4 + 4 = 8, 4^4 = 0
Count = 4
Solution Approach:
A simple solution is to find the values of the sum of n and i and xor of n and i. Compare both these values and then count the values for which they are equal.
Algorithm:
Step 1: Loop for all values from i = 0 to n.
Step 1.1: Find the value of (n + i).
Step 1.2: Find the value of (n^i).
Step 1.3: compare values found in step 1.1 and 1.2.
Step 1.4: If they are equal, increase count.
Step 2: Print count values.
Program to illustrate the working of our solution,
Example
#include <iostream>
using namespace std;
int main() {
int n = 5;
int counter = 0;
for(int i=0; i<=n; i++ )
if ( (n+i) == (n^i) )
counter++;
cout<<"The count of integers with equal sum and XOR is "<<counter;
return 0;
}
Output −
The count of integers with equal sum and XOR is 2
The method is good but their can be a better solution to the problem, which is using the fact that
If n^i = n+i, then n&i = 0.
If the value of n&i = 0, for that we need the two numbers to have opposite set and unset bits. And we need to count such values. Here is a program to do it,
Example
#include <iostream>
using namespace std;
int countValuesWithEqualSumXOR(int n) {
int countUnSetBits=0;
while (n) {
if ((n & 1) == 0)
countUnSetBits++;
n=n>>1;
}
return 1 << countUnSetBits;
}
int main()
{
int n = 6;
cout<<"The count of integers with equal sum and XOR is "<<countValuesWithEqualSumXOR(n);
return 0;
}
Output −
The count of integers with equal sum and XOR is 2