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