C ++中第K个置1位在数字中的位置

在这个问题中,我们给了两个整数N和K。我们的任务是找到第K索引,该索引设置了一个从右开始计数的N位数。

从数字的二进制表示形式检查设置位。二进制表示形式的索引从右方向的索引0开始,并向左传播。

示例-在二进制数'011101'中,从右开始的索引0为1,从右开始的索引1为0,依此类推。

现在,让我们以一个例子来理解问题

输入-N = 6,K = 2

输出-2

说明-6的二进制表示形式是0110。右边第二个置1的位将在索引2处。

为了解决这个问题,我们将必须检查当前位是否已设置,如果已设置,则我们将减小K的值。每次检查后,我们将数字bt 1移位,这将给出下一位,也将保持轮班的次数。一旦K的值变为0,我们将打印完成的移位计数。

示例

程序展示了我们逻辑的执行

#include <iostream>

using namespace std;

int FindIndexKthBit(int N, int K) {

   int index=0;

   while (N) {

      if (N & 1)

         K--;

      if (!K)

         return index;

      index++;

      N = N >> 1;

   }

   return -1;

}

int main() {

   int N = 12, K = 2;

   cout<<"The "<<K<<"th set bit of the number "<<N<<" is at index : \t";

   int index = FindIndexKthBit(N, K);

   if (index!=-1)

      cout<<index;

   else

      cout<<"\nsorry no index found";

   return 0;

}

输出结果

The 2th set bit of the number 12 is at index : 3

以上是 C ++中第K个置1位在数字中的位置 的全部内容, 来源链接: utcz.com/z/347159.html

回到顶部