C ++中的等于和与XOR
在这个问题上,我们得到一个整数n。我们的任务是创建一个程序,以查找从i=0到n的整数计数,其中sum等于XOR,即(n+i)=(n^i)。
让我们举个例子来了解这个问题,
输入: n=4
输出 4
解释:
考虑i从0到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
计数=4
解决方法:
一个简单的解决方案是找到n和i之和与n和i的异或的值。比较这两个值,然后计算它们相等的值。
算法:
步骤1: 循环搜索从i=0到n的所有值。
步骤1.1: 找到(n+i)的值。
步骤1.2: 找到(n^i)的值。
步骤1.3: 比较在步骤1.1和1.2中找到的值。
步骤1.4: 如果相等,则增加计数。
步骤2: 打印计 数值。
该程序说明了我们解决方案的工作原理,
示例
#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<<"总和与XOR相等的整数的计数为 "<<counter;
return 0;
}输出-
总和与XOR相等的整数的计数为 2
该方法是好的,但是他们可以更好地解决该问题,这是基于以下事实:
如果n^i=n+i,则n&i=0。
如果n&i=0,那么我们需要两个数字具有相反的置位和未置位位。我们需要计算这些值。这是一个执行此操作的程序,
示例
#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<<"总和与XOR相等的整数的计数为 "<<countValuesWithEqualSumXOR(n);
return 0;
}输出-
总和与XOR相等的整数的计数为 2