C++中计算与n异或结果更大的较小数字个数


给定一个整数,例如num,任务是计算小于num的较小数字个数,这些数字与num的异或结果大于该异或值。

异或运算的真值表如下所示

ABA XOR B
000
101
011
110

输入 − int num = 11

输出 − 与n异或结果更大的较小数字个数为 − 4

解释

给定num为11,这意味着我们需要找到num与小于num的数字的异或结果。这些数字是1 XOR 11 < 11(FALSE), 2 XOR 11 < 11(FALSE), 3 XOR 11 < 11(FALSE), 4 XOR 11 > 11(TRUE), 5 XOR 11 > 11(TRUE), 6 XOR 11 > 11(TRUE), 7 XOR 11 > 11(TRUE), 8 XOR 11 < 11(FALSE), 9 XOR 11 < 11(FALSE), 10 XOR 11 < 11(FALSE).

输入 − int num = 12

输出 − 与n异或结果更大的较小数字个数为 − 3

解释

给定num为12,这意味着我们需要找到num与小于num的数字的异或结果。这些数字是1 XOR 12 > 12(TRUE), 2 XOR 12 > 12(TRUE), 3 XOR 12 > 12(TRUE), 4 XOR 12 < 12(FALSE), 5 XOR 12 < 12(FALSE), 6 XOR 12 < 12(FALSE), 7 XOR 12 < 12(FALSE), 8 XOR 12 < 12(FALSE), 9 XOR 12 < 12(FALSE), 10 XOR 12 < 12(FALSE), 11 XOR 12 < 12(FALSE).

下面程序中使用的算法如下

  • 输入一个整数元素并将其存储在一个名为num的变量中。

  • 将num的值传递给函数进行进一步处理

  • 创建一个临时变量count来存储结果。

  • 当num > 0时启动循环WHILE

  • 在循环内,检查IF num & 1 == TRUE,则将count设置为count + pow(2, temp)

  • 将temp的值加1

  • 并将num设置为num >> = 1

  • 返回count

  • 打印结果

示例

 在线演示

#include
using namespace std;
//Count smaller numbers whose XOR with n produces greater value
int XOR_greater(int n){
   int temp = 0;
   int count = 0;
   while (n > 0){
      if ((n&1) == 0){
         count += pow(2, temp);
      }
      temp++;
      n >>= 1;
   }
   return count;
}
int main(){
   int n = 20;
   cout<<"Count of smaller numbers whose XOR with n produces greater value are: "<<XOR_greater(n) << endl;
   return 0;
}

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

如果运行上述代码,它将生成以下输出:

Count of smaller numbers whose XOR with n produces greater value are: 11

更新于:2020年8月31日

88 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告